include/vcl/pdfwriter.hxx | 2 - vcl/inc/pdf/pdfwriter_impl.hxx | 8 +++--- vcl/source/gdi/pdfwriter.cxx | 2 - vcl/source/gdi/pdfwriter_impl.cxx | 47 ++++++++++++++++++------------------- vcl/source/gdi/pdfwriter_impl2.cxx | 2 - 5 files changed, 30 insertions(+), 31 deletions(-)
New commits: commit c16eaa0629769362cc3edbf0ee951b430c0ae7dd Author: Noel Grandin <noel.gran...@collabora.co.uk> AuthorDate: Wed Aug 6 19:35:21 2025 +0200 Commit: Noel Grandin <noel.gran...@collabora.co.uk> CommitDate: Wed Aug 6 21:44:37 2025 +0200 BitmapEx->Bitmap in PDFWriter now that Bitmap supports transparency Change-Id: I1bbfa6e5f48b74d0c88d0f1375b0c14007ac1b47 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/189020 Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk> Tested-by: Jenkins diff --git a/include/vcl/pdfwriter.hxx b/include/vcl/pdfwriter.hxx index 91efaeeeee82..dd36dcfaa1fd 100644 --- a/include/vcl/pdfwriter.hxx +++ b/include/vcl/pdfwriter.hxx @@ -876,7 +876,7 @@ public: const Bitmap& rBitmap, const Graphic& rGraphic ); void DrawBitmapEx( const Point& rDestPt, const Size& rDestSize, - const BitmapEx& rBitmapEx ); + const Bitmap& rBitmap ); void DrawGradient( const tools::Rectangle& rRect, const Gradient& rGradient ); void DrawGradient( const tools::PolyPolygon& rPolyPoly, const Gradient& rGradient ); diff --git a/vcl/inc/pdf/pdfwriter_impl.hxx b/vcl/inc/pdf/pdfwriter_impl.hxx index 5d008fdde629..a172c82a1785 100644 --- a/vcl/inc/pdf/pdfwriter_impl.hxx +++ b/vcl/inc/pdf/pdfwriter_impl.hxx @@ -200,7 +200,7 @@ struct ReferenceXObjectEmit struct BitmapEmit { BitmapID m_aID; - BitmapEx m_aBitmap; + Bitmap m_aBitmap; sal_Int32 m_nObject; ReferenceXObjectEmit m_aReferenceXObject; @@ -900,8 +900,8 @@ private: /* tries to find the bitmap by its id and returns its emit data if exists, else creates a new emit data block */ - const BitmapEmit& createBitmapEmit( const BitmapEx& rBitmapEx, const Graphic& rGraphic, std::list<BitmapEmit>& rBitmaps, ResourceDict& rResourceDict, std::list<StreamRedirect>& rOutputStreams ); - const BitmapEmit& createBitmapEmit( const BitmapEx& rBitmapEx, const Graphic& rGraphic ); + const BitmapEmit& createBitmapEmit( const Bitmap& rBitmap, const Graphic& rGraphic, std::list<BitmapEmit>& rBitmaps, ResourceDict& rResourceDict, std::list<StreamRedirect>& rOutputStreams ); + const BitmapEmit& createBitmapEmit( const Bitmap& rBitmap, const Graphic& rGraphic ); /* writes the Do operation inside the content stream */ void drawBitmap( const Point& rDestPt, const Size& rDestSize, const BitmapEmit& rBitmap, const Color& rFillColor ); @@ -1250,7 +1250,7 @@ public: void drawArc( const tools::Rectangle& rRect, const Point& rStart, const Point& rStop, bool bWithPie, bool bWidthChord ); void drawBitmap( const Point& rDestPoint, const Size& rDestSize, const Bitmap& rBitmap, const Graphic& rGraphic ); - void drawBitmap( const Point& rDestPoint, const Size& rDestSize, const BitmapEx& rBitmap ); + void drawBitmap( const Point& rDestPoint, const Size& rDestSize, const Bitmap& rBitmap ); void drawJPGBitmap( SvStream& rDCTData, bool bIsTrueColor, const Size& rSizePixel, const tools::Rectangle& rTargetArea, const AlphaMask& rAlphaMask, const Graphic& rGraphic ); /// Stores the original PDF data from rGraphic as an embedded file. void createEmbeddedFile(const Graphic& rGraphic, ReferenceXObjectEmit& rEmit, sal_Int32 nBitmapObject); diff --git a/vcl/source/gdi/pdfwriter.cxx b/vcl/source/gdi/pdfwriter.cxx index 20e3df5b2c36..6b9375f39de9 100644 --- a/vcl/source/gdi/pdfwriter.cxx +++ b/vcl/source/gdi/pdfwriter.cxx @@ -181,7 +181,7 @@ void PDFWriter::DrawBitmap( const Point& rDestPt, const Size& rDestSize, const B xImplementation->drawBitmap( rDestPt, rDestSize, rBitmap, rGraphic ); } -void PDFWriter::DrawBitmapEx( const Point& rDestPt, const Size& rDestSize, const BitmapEx& rBitmap ) +void PDFWriter::DrawBitmapEx( const Point& rDestPt, const Size& rDestSize, const Bitmap& rBitmap ) { xImplementation->drawBitmap( rDestPt, rDestSize, rBitmap ); } diff --git a/vcl/source/gdi/pdfwriter_impl.cxx b/vcl/source/gdi/pdfwriter_impl.cxx index 1030f4155fda..90dafccd62f8 100644 --- a/vcl/source/gdi/pdfwriter_impl.cxx +++ b/vcl/source/gdi/pdfwriter_impl.cxx @@ -1578,7 +1578,7 @@ void PDFWriterImpl::endPage() if( ! bitmap.m_aBitmap.IsEmpty() ) { writeBitmapObject(bitmap); - bitmap.m_aBitmap = BitmapEx(); + bitmap.m_aBitmap = Bitmap(); } } for (auto & jpeg : m_aJPGs) @@ -2628,7 +2628,7 @@ bool PDFWriterImpl::emitType3Font(const vcl::font::PhysicalFontFace* pFace, vcl::PngImageReader aReader(aStream); Bitmap aBitmap = aReader.read(); - const BitmapEmit& rBitmapEmit = createBitmapEmit(BitmapEx(aBitmap), Graphic(), + const BitmapEmit& rBitmapEmit = createBitmapEmit(aBitmap, Graphic(), aUsedBitmaps, aResourceDict, aOutputStreams); @@ -9616,19 +9616,18 @@ bool PDFWriterImpl::writeBitmapObject( const BitmapEmit& rObject ) return false; bool bWriteMask = false; - Bitmap aBitmap = rObject.m_aBitmap.GetBitmap(); - if( rObject.m_aBitmap.IsAlpha() ) + if( rObject.m_aBitmap.HasAlpha() ) { if( m_aContext.Version >= PDFWriter::PDFVersion::PDF_1_4 ) bWriteMask = true; // else draw without alpha channel } - BitmapScopedReadAccess pAccess(aBitmap); + BitmapScopedReadAccess pAccess(rObject.m_aBitmap); bool bTrueColor = true; sal_Int32 nBitsPerComponent = 0; - auto const ePixelFormat = aBitmap.getPixelFormat(); + auto const ePixelFormat = rObject.m_aBitmap.getPixelFormat(); switch (ePixelFormat) { case vcl::PixelFormat::N8_BPP: @@ -9655,9 +9654,9 @@ bool PDFWriterImpl::writeBitmapObject( const BitmapEmit& rObject ) aLine.append( rObject.m_nObject ); aLine.append( " 0 obj " "<</Type/XObject/Subtype/Image/Width " ); - aLine.append( static_cast<sal_Int32>(aBitmap.GetSizePixel().Width()) ); + aLine.append( static_cast<sal_Int32>(rObject.m_aBitmap.GetSizePixel().Width()) ); aLine.append( "/Height " ); - aLine.append( static_cast<sal_Int32>(aBitmap.GetSizePixel().Height()) ); + aLine.append( static_cast<sal_Int32>(rObject.m_aBitmap.GetSizePixel().Height()) ); aLine.append( "/BitsPerComponent " ); aLine.append( nBitsPerComponent ); aLine.append( "/Length " ); @@ -9672,7 +9671,7 @@ bool PDFWriterImpl::writeBitmapObject( const BitmapEmit& rObject ) else { aLine.append( "/Filter/CCITTFaxDecode/DecodeParms<</K -1/BlackIs1 true/Columns " ); - aLine.append( static_cast<sal_Int32>(aBitmap.GetSizePixel().Width()) ); + aLine.append( static_cast<sal_Int32>(rObject.m_aBitmap.GetSizePixel().Width()) ); aLine.append( ">> " ); } } @@ -9792,7 +9791,7 @@ bool PDFWriterImpl::writeBitmapObject( const BitmapEmit& rObject ) if (!writeBuffer(aLine)) return false; if( nMaskObject ) - return writeBitmapMaskObject( nMaskObject, rObject.m_aBitmap.GetAlphaMask() ); + return writeBitmapMaskObject( nMaskObject, BitmapEx(rObject.m_aBitmap).GetAlphaMask() ); writeReferenceXObject(rObject.m_aReferenceXObject); @@ -9939,10 +9938,10 @@ void PDFWriterImpl::drawJPGBitmap( SvStream& rDCTData, bool bIsTrueColor, const { Bitmap aBmp( aGraphic.GetBitmapEx().GetBitmap() ); BitmapEx aBmpEx( aBmp, rAlphaMask ); - drawBitmap( rTargetArea.TopLeft(), rTargetArea.GetSize(), aBmpEx ); + drawBitmap( rTargetArea.TopLeft(), rTargetArea.GetSize(), Bitmap(aBmpEx) ); } else - drawBitmap( rTargetArea.TopLeft(), rTargetArea.GetSize(), aGraphic.GetBitmapEx() ); + drawBitmap( rTargetArea.TopLeft(), rTargetArea.GetSize(), Bitmap(aGraphic.GetBitmapEx()) ); return; } @@ -10037,19 +10036,19 @@ void PDFWriterImpl::drawBitmap( const Point& rDestPoint, const Size& rDestSize, writeBuffer( rLine ); } -const BitmapEmit& PDFWriterImpl::createBitmapEmit(const BitmapEx& i_rBitmap, const Graphic& rGraphic, std::list<BitmapEmit>& rBitmaps, ResourceDict& rResourceDict, std::list<StreamRedirect>& rOutputStreams) +const BitmapEmit& PDFWriterImpl::createBitmapEmit(const Bitmap& i_rBitmap, const Graphic& rGraphic, std::list<BitmapEmit>& rBitmaps, ResourceDict& rResourceDict, std::list<StreamRedirect>& rOutputStreams) { - BitmapEx aBitmap( i_rBitmap ); - auto ePixelFormat = aBitmap.GetBitmap().getPixelFormat(); + Bitmap aBitmap( i_rBitmap ); + auto ePixelFormat = aBitmap.getPixelFormat(); if( m_aContext.ColorMode == PDFWriter::DrawGreyscale ) aBitmap.Convert(BmpConversion::N8BitGreys); BitmapID aID; aID.m_aPixelSize = aBitmap.GetSizePixel(); aID.m_nSize = vcl::pixelFormatBitCount(ePixelFormat); - aID.m_nChecksum = aBitmap.GetBitmap().GetChecksum(); + aID.m_nChecksum = BitmapEx(aBitmap).GetBitmap().GetChecksum(); aID.m_nMaskChecksum = 0; - if( aBitmap.IsAlpha() ) - aID.m_nMaskChecksum = aBitmap.GetAlphaMask().GetChecksum(); + if( aBitmap.HasAlpha() ) + aID.m_nMaskChecksum = BitmapEx(aBitmap).GetAlphaMask().GetChecksum(); std::list<BitmapEmit>::const_iterator it = std::find_if(rBitmaps.begin(), rBitmaps.end(), [&](const BitmapEmit& arg) { return aID == arg.m_aID; }); if (it == rBitmaps.end()) @@ -10070,7 +10069,7 @@ const BitmapEmit& PDFWriterImpl::createBitmapEmit(const BitmapEx& i_rBitmap, con return *it; } -const BitmapEmit& PDFWriterImpl::createBitmapEmit( const BitmapEx& i_rBitmap, const Graphic& rGraphic ) +const BitmapEmit& PDFWriterImpl::createBitmapEmit( const Bitmap& i_rBitmap, const Graphic& rGraphic ) { return createBitmapEmit(i_rBitmap, rGraphic, m_aBitmaps, m_aGlobalResourceDict, m_aOutputStreams); } @@ -10083,11 +10082,11 @@ void PDFWriterImpl::drawBitmap( const Point& rDestPoint, const Size& rDestSize, if( ! (rDestSize.Width() && rDestSize.Height()) ) return; - const BitmapEmit& rEmit = createBitmapEmit( BitmapEx( rBitmap ), rGraphic ); + const BitmapEmit& rEmit = createBitmapEmit( rBitmap, rGraphic ); drawBitmap( rDestPoint, rDestSize, rEmit, COL_TRANSPARENT ); } -void PDFWriterImpl::drawBitmap( const Point& rDestPoint, const Size& rDestSize, const BitmapEx& rBitmap ) +void PDFWriterImpl::drawBitmap( const Point& rDestPoint, const Size& rDestSize, const Bitmap& rBitmap ) { MARK( "drawBitmap (BitmapEx)" ); @@ -10195,12 +10194,12 @@ void PDFWriterImpl::drawWallpaper( const tools::Rectangle& rRect, const Wallpape bool bDrawGradient = false; bool bDrawBitmap = false; - BitmapEx aBitmap; + Bitmap aBitmap; Point aBmpPos = rRect.TopLeft(); Size aBmpSize; if( rWall.IsBitmap() ) { - aBitmap = rWall.GetBitmap(); + aBitmap = Bitmap(rWall.GetBitmap()); aBmpSize = lcl_convert( aBitmap.GetPrefMapMode(), getMapMode(), this, @@ -10315,7 +10314,7 @@ void PDFWriterImpl::drawWallpaper( const tools::Rectangle& rRect, const Wallpape bDrawBitmap = true; } - if( aBitmap.IsAlpha() ) + if( aBitmap.HasAlpha() ) { if( rWall.IsGradient() ) bDrawGradient = true; diff --git a/vcl/source/gdi/pdfwriter_impl2.cxx b/vcl/source/gdi/pdfwriter_impl2.cxx index 75990fdcb4b4..642f8e88aa43 100644 --- a/vcl/source/gdi/pdfwriter_impl2.cxx +++ b/vcl/source/gdi/pdfwriter_impl2.cxx @@ -260,7 +260,7 @@ void PDFWriterImpl::implWriteBitmapEx( const Point& i_rPoint, const Size& i_rSiz } } else if ( aBitmapEx.IsAlpha() ) - m_rOuterFace.DrawBitmapEx( aPoint, aSize, aBitmapEx ); + m_rOuterFace.DrawBitmapEx( aPoint, aSize, Bitmap(aBitmapEx) ); else m_rOuterFace.DrawBitmap( aPoint, aSize, aBitmapEx.GetBitmap(), i_Graphic );