[Libreoffice-commits] core.git: Branch 'libreoffice-5-2' - vcl/source
Caolán McNamara
caolanm at redhat.com
Tue Oct 18 13:25:39 UTC 2016
vcl/source/gdi/pdfwriter_impl.cxx | 36 +++++++++++++++++++++++++++++++++---
1 file changed, 33 insertions(+), 3 deletions(-)
New commits:
commit ac245ef35b6a70474909a66e8988ee225321e9b4
Author: Caolán McNamara <caolanm at redhat.com>
Date: Thu Oct 13 20:14:03 2016 +0100
Resolves: tdf#103051 pdf export assumed 1bit bitmaps were N1BitMsbPal
Change-Id: I2268d8b74f187d07f161f42cc9530be3ebbc86d0
(cherry picked from commit 1c9096dad7dc2ee25d9ebe16ab02d5caba5f8a79)
Reviewed-on: https://gerrit.libreoffice.org/29794
Tested-by: Jenkins <ci at libreoffice.org>
Reviewed-by: Miklos Vajna <vmiklos at collabora.co.uk>
diff --git a/vcl/source/gdi/pdfwriter_impl.cxx b/vcl/source/gdi/pdfwriter_impl.cxx
index 3101d98..3891303 100644
--- a/vcl/source/gdi/pdfwriter_impl.cxx
+++ b/vcl/source/gdi/pdfwriter_impl.cxx
@@ -11128,6 +11128,36 @@ void PDFWriterImpl::writeJPG( JPGEmit& rObject )
}
}
+namespace
+{
+ unsigned char reverseByte(unsigned char b)
+ {
+ b = (b & 0xF0) >> 4 | (b & 0x0F) << 4;
+ b = (b & 0xCC) >> 2 | (b & 0x33) << 2;
+ b = (b & 0xAA) >> 1 | (b & 0x55) << 1;
+ return b;
+ }
+
+ //tdf#103051 convert any N1BitLsbPal to N1BitMsbPal
+ Bitmap getExportBitmap(const Bitmap &rBitmap)
+ {
+ Bitmap::ScopedReadAccess pAccess(const_cast<Bitmap&>(rBitmap));
+ const ScanlineFormat eFormat = pAccess->GetScanlineFormat();
+ if (eFormat != ScanlineFormat::N1BitLsbPal)
+ return rBitmap;
+ Bitmap aNewBmp(rBitmap);
+ Bitmap::ScopedWriteAccess xWriteAcc(aNewBmp);
+ const int nScanLineBytes = (pAccess->Width() + 7U) / 8U;
+ for (long nY = 0L; nY < xWriteAcc->Height(); ++nY)
+ {
+ Scanline pBitSwap = xWriteAcc->GetScanline(nY);
+ for (int x = 0; x < nScanLineBytes; ++x)
+ pBitSwap[x] = reverseByte(pBitSwap[x]);
+ }
+ return aNewBmp;
+ }
+}
+
bool PDFWriterImpl::writeBitmapObject( BitmapEmit& rObject, bool bMask )
{
CHECK_RETURN( updateObject( rObject.m_nObject ) );
@@ -11137,7 +11167,7 @@ bool PDFWriterImpl::writeBitmapObject( BitmapEmit& rObject, bool bMask )
bool bWriteMask = false;
if( ! bMask )
{
- aBitmap = rObject.m_aBitmap.GetBitmap();
+ aBitmap = getExportBitmap(rObject.m_aBitmap.GetBitmap());
if( rObject.m_aBitmap.IsAlpha() )
{
if( m_aContext.Version >= PDFWriter::PDF_1_4 )
@@ -11166,13 +11196,13 @@ bool PDFWriterImpl::writeBitmapObject( BitmapEmit& rObject, bool bMask )
{
if( m_aContext.Version < PDFWriter::PDF_1_4 || ! rObject.m_aBitmap.IsAlpha() )
{
- aBitmap = rObject.m_aBitmap.GetMask();
+ aBitmap = getExportBitmap(rObject.m_aBitmap.GetMask());
aBitmap.Convert( BMP_CONVERSION_1BIT_THRESHOLD );
DBG_ASSERT( aBitmap.GetBitCount() == 1, "mask conversion failed" );
}
else if( aBitmap.GetBitCount() != 8 )
{
- aBitmap = rObject.m_aBitmap.GetAlpha().GetBitmap();
+ aBitmap = getExportBitmap(rObject.m_aBitmap.GetAlpha().GetBitmap());
aBitmap.Convert( BMP_CONVERSION_8BIT_GREYS );
DBG_ASSERT( aBitmap.GetBitCount() == 8, "alpha mask conversion failed" );
}
More information about the Libreoffice-commits
mailing list