diff options
author | Vasily Melenchuk <Vasily.Melenchuk@cib.de> | 2018-02-27 19:08:35 +0300 |
---|---|---|
committer | Katarina Behrens <Katarina.Behrens@cib.de> | 2018-03-01 22:04:05 +0100 |
commit | 532cca2cedea9a9c9184685e35bdd22f0b522437 (patch) | |
tree | 4be9d61ef2df46a3e58b0aa1e5647189a0f7b028 | |
parent | 0809eac4baddd02c3f4405148269f877c0f56c3f (diff) |
tdf#115297: alternative fix for displaying 1bit images
Previous fixes for 1bit monochrome / paletted images produced some
regressions, so here is attempt to fix problem at the root.
Partially reverted 66dbd4da3afcadb1393daf9be9cecff71b86509a and
fixed in a different way without tdf#115297, tdf#114726 and related.
Change-Id: I6849ed5ac41770ba905c930065c80e58509dba2e
Reviewed-on: https://gerrit.libreoffice.org/50454
Reviewed-by: Thorsten Behrens <Thorsten.Behrens@CIB.de>
Tested-by: Thorsten Behrens <Thorsten.Behrens@CIB.de>
(cherry picked from commit 25cd843664919974f0d21ca7a0b02cc43e9eeabb)
Reviewed-on: https://gerrit.libreoffice.org/50540
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Katarina Behrens <Katarina.Behrens@cib.de>
-rw-r--r-- | vcl/headless/svpgdi.cxx | 25 | ||||
-rw-r--r-- | vcl/source/gdi/pngread.cxx | 10 |
2 files changed, 25 insertions, 10 deletions
diff --git a/vcl/headless/svpgdi.cxx b/vcl/headless/svpgdi.cxx index bcb0e46e8bec..67433a2b30e1 100644 --- a/vcl/headless/svpgdi.cxx +++ b/vcl/headless/svpgdi.cxx @@ -1088,10 +1088,33 @@ void SvpSalGraphics::copyBits( const SalTwoRect& rTR, cairo_surface_destroy(pCopy); } +namespace +{ + bool isBlackWhite(const SalBitmap& rBitmap) + { + const SvpSalBitmap& rSrcBmp = static_cast<const SvpSalBitmap&>(rBitmap); + const BitmapBuffer * pSourceBuffer = rSrcBmp.GetBuffer(); + const BitmapPalette & rPalette = pSourceBuffer->maPalette; + + return ( + rPalette.GetEntryCount() < 2 || + + (rPalette.GetEntryCount() == 2 && + rPalette[0] == Color(COL_BLACK) && + rPalette[1] == Color(COL_WHITE) ) || + + (rPalette.GetEntryCount() == 2 && + rPalette[1] == Color(COL_BLACK) && + rPalette[0] == Color(COL_WHITE) ) + ); + } +} + void SvpSalGraphics::drawBitmap(const SalTwoRect& rTR, const SalBitmap& rSourceBitmap) { - if (rSourceBitmap.GetBitCount() == 1) + if (rSourceBitmap.GetBitCount() == 1 && isBlackWhite(rSourceBitmap)) { + // This way we draw only monochrome b/w bitmaps MaskHelper aMask(rSourceBitmap); cairo_surface_t* source = aMask.getMask(); copySource(rTR, source); diff --git a/vcl/source/gdi/pngread.cxx b/vcl/source/gdi/pngread.cxx index 2458d0269e76..0b6946712bc2 100644 --- a/vcl/source/gdi/pngread.cxx +++ b/vcl/source/gdi/pngread.cxx @@ -534,19 +534,11 @@ bool PNGReaderImpl::ImplReadHeader( const Size& rPreviewSizeHint ) { switch ( mnPngDepth ) { - case 1 : -#if defined(UNX) && !defined(MACOSX) - // 1bpp indexed images are so badly mishandled by rest of LO on X11 that we - // don't even bother, and turn them into 8bpp indexed ones with just two palette - // entries instead. - mnTargetDepth = 8; // we have to expand the bitmap -#endif - mbPalette = false; - break; case 2 : mnTargetDepth = 4; // we have to expand the bitmap mbPalette = false; break; + case 1 : case 4 : case 8 : mbPalette = false; |