From 473066c526ac1d970658b39381436b23d78676ac Mon Sep 17 00:00:00 2001 From: Caolán McNamara Date: Fri, 31 Mar 2017 09:36:05 +0100 Subject: expand forcing to mono mask during load to non-indexed sources too Change-Id: I38c1eec5e180d689de72413b1438c88a1085bbb5 --- vcl/source/gdi/dibtools.cxx | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'vcl/source') diff --git a/vcl/source/gdi/dibtools.cxx b/vcl/source/gdi/dibtools.cxx index 576c38871918..37408f408154 100644 --- a/vcl/source/gdi/dibtools.cxx +++ b/vcl/source/gdi/dibtools.cxx @@ -337,6 +337,14 @@ namespace return nIndex; } + + BitmapColor SanitizeColor(const BitmapColor &rColor, bool bForceToMonoWhileReading) + { + if (!bForceToMonoWhileReading) + return rColor; + return BitmapColor(static_cast(rColor.GetLuminance() >= 255)); + } + } bool ImplDecodeRLE(sal_uInt8* pBuffer, DIBV5Header& rHeader, BitmapWriteAccess& rAcc, BitmapPalette& rPalette, bool bForceToMonoWhileReading, bool bRLE4) @@ -661,7 +669,7 @@ bool ImplReadDIBBits(SvStream& rIStm, DIBV5Header& rHeader, BitmapWriteAccess& r for( long nX = 0; nX < nWidth; nX++ ) { aMask.GetColorFor16BitLSB( aColor, reinterpret_cast(pTmp16++) ); - rAcc.SetPixel( nY, nX, aColor ); + rAcc.SetPixel(nY, nX, SanitizeColor(aColor, bForceToMonoWhileReading)); } } } @@ -685,7 +693,7 @@ bool ImplReadDIBBits(SvStream& rIStm, DIBV5Header& rHeader, BitmapWriteAccess& r aPixelColor.SetBlue( *pTmp++ ); aPixelColor.SetGreen( *pTmp++ ); aPixelColor.SetRed( *pTmp++ ); - rAcc.SetPixel( nY, nX, aPixelColor ); + rAcc.SetPixel(nY, nX, SanitizeColor(aPixelColor, bForceToMonoWhileReading)); } } } @@ -723,7 +731,7 @@ bool ImplReadDIBBits(SvStream& rIStm, DIBV5Header& rHeader, BitmapWriteAccess& r for( long nX = 0; nX < nWidth; nX++ ) { aMask.GetColorAndAlphaFor32Bit( aColor, aAlpha, reinterpret_cast(pTmp32++) ); - rAcc.SetPixel( nY, nX, aColor ); + rAcc.SetPixel(nY, nX, SanitizeColor(aColor, bForceToMonoWhileReading)); pAccAlpha->SetPixelIndex(nY, nX, sal_uInt8(0xff) - aAlpha); rAlphaUsed |= bool(0xff != aAlpha); } @@ -743,7 +751,7 @@ bool ImplReadDIBBits(SvStream& rIStm, DIBV5Header& rHeader, BitmapWriteAccess& r for( long nX = 0; nX < nWidth; nX++ ) { aMask.GetColorFor32Bit( aColor, reinterpret_cast(pTmp32++) ); - rAcc.SetPixel( nY, nX, aColor ); + rAcc.SetPixel(nY, nX, SanitizeColor(aColor, bForceToMonoWhileReading)); } } } -- cgit