Author: lijiany
Date: Thu Aug 16 02:26:37 2012
New Revision: 1373702

URL: http://svn.apache.org/viewvc?rev=1373702&view=rev
Log:
#119535# Fix WMF image with type pattern brush
Reported by: Du Jing
Patch by: Jianyuan Li
Review by: SunYing

Modified:
    incubator/ooo/trunk/main/svtools/source/filter/wmf/enhwmf.cxx

Modified: incubator/ooo/trunk/main/svtools/source/filter/wmf/enhwmf.cxx
URL: 
http://svn.apache.org/viewvc/incubator/ooo/trunk/main/svtools/source/filter/wmf/enhwmf.cxx?rev=1373702&r1=1373701&r2=1373702&view=diff
==============================================================================
--- incubator/ooo/trunk/main/svtools/source/filter/wmf/enhwmf.cxx (original)
+++ incubator/ooo/trunk/main/svtools/source/filter/wmf/enhwmf.cxx Thu Aug 16 
02:26:37 2012
@@ -1280,7 +1280,45 @@ sal_Bool EnhWMFReader::ReadEnhWMF()
                 }
             }
             break;
-
+                       case EMR_CREATEDIBPATTERNBRUSHPT :
+                               sal_uInt32      nTmp32;
+                               sal_uInt32  nOffset;
+                               *pWMF >> nIndex;
+                               Bitmap  aBmp;
+                               BitmapReadAccess* pBmp;
+                               sal_uInt32      nRed = 0, nGreen = 0, nBlue = 
0, nCount = 1;
+
+                               *pWMF >> nTmp32;
+                               *pWMF >> nOffset;
+                               for ( sal_Int32 i = 0; i < (nOffset - 20)/4; i 
++ )
+                               {
+                                       *pWMF >> nTmp32;
+                               }
+
+                               aBmp.Read( *pWMF, sal_False );
+                               pBmp = aBmp.AcquireReadAccess();
+                               if ( pBmp )
+                               {
+                                       for ( sal_Int32 y = 0; y < 
pBmp->Height(); y++ )
+                                       {
+                                               for ( sal_Int32 x = 0; x < 
pBmp->Width(); x++ )
+                                               {
+                                                       const BitmapColor 
aColor( pBmp->GetColor( y, x ) );                                             
+                                                       
+                                                       nRed += aColor.GetRed();
+                                                       nGreen += 
aColor.GetGreen();
+                                                       nBlue += 
aColor.GetBlue();
+                                               }
+                                       }
+                                       nCount = pBmp->Height() * pBmp->Width();
+                                       if ( !nCount )
+                                               nCount++;
+                                       aBmp.ReleaseAccess( pBmp );
+                               }
+                               Color aColor( (sal_Char)( nRed / nCount ), 
(sal_Char)( nGreen / nCount ), (sal_Char)( nBlue / nCount ) );
+                               pOut->CreateObject( nIndex, GDI_BRUSH, new 
WinMtfFillStyle( aColor, sal_False ) );
+                               
+                       break;
 
 #ifdef WIN_MTF_ASSERT
             default :                           WinMtfAssertHandler( "Unknown 
Meta Action" );       break;


Reply via email to