Kaydet (Commit) 25cd8436 authored tarafından Vasily Melenchuk's avatar Vasily Melenchuk Kaydeden (comit) Thorsten Behrens

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 66dbd4da and
fixed in a different way without tdf#115297, tdf#114726 and related.

Change-Id: I6849ed5ac41770ba905c930065c80e58509dba2e
Reviewed-on: https://gerrit.libreoffice.org/50454Reviewed-by: 's avatarThorsten Behrens <Thorsten.Behrens@CIB.de>
Tested-by: 's avatarThorsten Behrens <Thorsten.Behrens@CIB.de>
üst ed7cd318
......@@ -1200,10 +1200,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);
......
......@@ -535,19 +535,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;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment