diff options
author | Thorsten Behrens <tbehrens@suse.com> | 2013-01-23 11:42:55 +0100 |
---|---|---|
committer | Petr Mladek <pmladek@suse.cz> | 2013-03-04 17:10:29 +0100 |
commit | 7de4f6e82551ff7d64b4327245eb0c99ea5deaf0 (patch) | |
tree | 3a7b4fbfe24483236e578c06f9eb0f2717446275 /vcl/source | |
parent | 299175c45c7fd6054c288576d863e7e067e16531 (diff) |
Fix fdo#59616 - ensure BitmapEx has same-sized subbitmaps
Lots of code relies on the fact that the two bitmaps inside a
BitmapEx actually have the same size. Enforce that convention during
import.
Change-Id: I436ccc33b06c627cd6347747d22c24bfaf7ca932
Reviewed-on: https://gerrit.libreoffice.org/1822
Reviewed-by: Radek Doulík <rodo@novell.com>
Tested-by: Radek Doulík <rodo@novell.com>
Diffstat (limited to 'vcl/source')
-rw-r--r-- | vcl/source/gdi/bitmapex.cxx | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/vcl/source/gdi/bitmapex.cxx b/vcl/source/gdi/bitmapex.cxx index d1d42629f7b1..133448cb80ee 100644 --- a/vcl/source/gdi/bitmapex.cxx +++ b/vcl/source/gdi/bitmapex.cxx @@ -904,6 +904,24 @@ SvStream& operator>>( SvStream& rIStm, BitmapEx& rBitmapEx ) if( !!aMask) { + // fdo#59616 enforce same size for both mask and content + if( aMask.GetSizePixel() != aBmp.GetSizePixel() ) + { + Bitmap aNewMask; + const Size aNominalSize=aBmp.GetSizePixel(); + BitmapReadAccess aAcc(aMask); + if( aAcc.HasPalette() ) + aNewMask = Bitmap(aNominalSize, + aMask.GetBitCount(), + &aAcc.GetPalette()); + else + aNewMask = Bitmap(aNominalSize, + aMask.GetBitCount()); + const Rectangle aCopyArea(Point(0,0), aNominalSize); + aNewMask.CopyPixel(aCopyArea, aCopyArea, &aMask); + aMask = aNewMask; + } + // do we have an alpha mask? if( ( 8 == aMask.GetBitCount() ) && aMask.HasGreyPalette() ) { |