diff options
author | Caolán McNamara <caolanm@redhat.com> | 2017-03-31 09:36:05 +0100 |
---|---|---|
committer | Ashod Nakashian <ashod.nakashian@collabora.co.uk> | 2017-12-05 08:17:32 -0500 |
commit | 053c0fcc0fc493699a12f1c75532b596a63f5686 (patch) | |
tree | 80d215e23e2ca0311e3710ee10ed53c7cdd39c19 | |
parent | 89034ee4af0908ff77a4609dddfbcdf522d4b7ba (diff) |
expand forcing to mono mask during load to non-indexed sources too
Change-Id: I38c1eec5e180d689de72413b1438c88a1085bbb5
(cherry picked from commit 473066c526ac1d970658b39381436b23d78676ac)
(cherry picked from commit e2a20b0795448df517b3932636bbdafffbb87565)
-rw-r--r-- | vcl/source/gdi/dibtools.cxx | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/vcl/source/gdi/dibtools.cxx b/vcl/source/gdi/dibtools.cxx index f36dd0beed6f..af5dae449af8 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<sal_uInt8>(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<sal_uInt8*>(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<sal_uInt8*>(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<sal_uInt8*>(pTmp32++) ); - rAcc.SetPixel( nY, nX, aColor ); + rAcc.SetPixel(nY, nX, SanitizeColor(aColor, bForceToMonoWhileReading)); } } } |