include/vcl/filter/ImportOutput.hxx      |    4 -
 vcl/source/filter/graphicfilter.cxx      |   32 +-------
 vcl/source/filter/igif/gifread.cxx       |    2 
 vcl/source/filter/ixbm/xbmread.cxx       |   12 +--
 vcl/source/filter/ixpm/xpmread.cxx       |   14 +--
 vcl/source/filter/jpeg/JpegReader.cxx    |    2 
 vcl/source/filter/png/PngImageReader.cxx |  117 +++++++++----------------------
 vcl/source/filter/png/png.hxx            |    3 
 8 files changed, 60 insertions(+), 126 deletions(-)

New commits:
commit 6354829686a11f0bbcd86fba5eced9d15b76d2c4
Author:     Noel Grandin <noel.gran...@collabora.co.uk>
AuthorDate: Fri Aug 1 09:33:35 2025 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Mon Aug 11 18:57:18 2025 +0200

    BitmapEx->Bitmap in ImportOutput
    
    now that Bitmap can handle transparency.
    
    Change-Id: I646c2255bc2c3a1ed08bb8ba6b933178182b53a8
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/188752
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/include/vcl/filter/ImportOutput.hxx 
b/include/vcl/filter/ImportOutput.hxx
index 107ae17b9a55..56bbf4ea4b31 100644
--- a/include/vcl/filter/ImportOutput.hxx
+++ b/include/vcl/filter/ImportOutput.hxx
@@ -10,7 +10,7 @@
 #pragma once
 
 #include <vcl/dllapi.h>
-#include <vcl/bitmapex.hxx>
+#include <vcl/bitmap.hxx>
 #include <vcl/animate/Animation.hxx>
 #include <vcl/gdimtf.hxx>
 
@@ -18,7 +18,7 @@ class VCL_DLLPUBLIC ImportOutput
 {
 public:
     bool mbIsAnimated = false;
-    std::optional<BitmapEx> moBitmap;
+    std::optional<Bitmap> moBitmap;
     std::optional<Animation> moAnimation;
     std::optional<GDIMetaFile> moGDIMetaFile;
 };
diff --git a/vcl/source/filter/graphicfilter.cxx 
b/vcl/source/filter/graphicfilter.cxx
index 222890883c7c..2a410899485a 100644
--- a/vcl/source/filter/graphicfilter.cxx
+++ b/vcl/source/filter/graphicfilter.cxx
@@ -570,7 +570,7 @@ void GraphicFilter::ImportGraphics(std::vector< 
std::shared_ptr<Graphic> >& rGra
 
                     if (ImportJPEG( *rContext.m_pStream, 
*rContext.m_pImportOutput, rContext.m_nImportFlags | 
GraphicFilterImportFlags::OnlyCreateBitmap, nullptr))
                     {
-                        Bitmap& rBitmap = 
const_cast<Bitmap&>(rContext.m_pImportOutput->moBitmap->GetBitmap());
+                        Bitmap& rBitmap = *rContext.m_pImportOutput->moBitmap;
                         rContext.m_pAccess = 
std::make_unique<BitmapScopedWriteAccess>(rBitmap);
                         rContext.m_pStream->Seek(rContext.m_nStreamBegin);
                         if (bThreads)
@@ -586,8 +586,7 @@ void GraphicFilter::ImportGraphics(std::vector< 
std::shared_ptr<Graphic> >& rGra
                     rContext.m_eLinkType = GfxLinkType::NativePng;
                     if (vcl::ImportPNG( *rContext.m_pStream, 
*rContext.m_pImportOutput, rContext.m_nImportFlags | 
GraphicFilterImportFlags::OnlyCreateBitmap, nullptr))
                     {
-                        const BitmapEx& rBitmapEx = 
*rContext.m_pImportOutput->moBitmap;
-                        Bitmap& rBitmap = 
const_cast<Bitmap&>(rBitmapEx.GetBitmap());
+                        Bitmap& rBitmap = *rContext.m_pImportOutput->moBitmap;
                         rContext.m_pAccess = 
std::make_unique<BitmapScopedWriteAccess>(rBitmap);
                         rContext.m_pStream->Seek(rContext.m_nStreamBegin);
                         if (bThreads)
@@ -957,7 +956,7 @@ ErrCode GraphicFilter::readJPEG(SvStream & rStream, Graphic 
& rGraphic, GfxLinkT
     }
     else
     {
-        Bitmap& rBitmap = 
const_cast<Bitmap&>(aImportOutput.moBitmap->GetBitmap());
+        Bitmap& rBitmap = *aImportOutput.moBitmap;
         BitmapScopedWriteAccess pWriteAccess(rBitmap);
         rStream.Seek(nPosition);
         if (!ImportJPEG(rStream, aImportOutput, nImportFlags | 
GraphicFilterImportFlags::UseExistingBitmap, &pWriteAccess))
diff --git a/vcl/source/filter/igif/gifread.cxx 
b/vcl/source/filter/igif/gifread.cxx
index 563064641e44..98dd1a531928 100644
--- a/vcl/source/filter/igif/gifread.cxx
+++ b/vcl/source/filter/igif/gifread.cxx
@@ -925,7 +925,7 @@ ReadState GIFReader::ReadGIF(ImportOutput& rImportOutput)
     if (aAnimation.Count() == 1)
     {
         rImportOutput.mbIsAnimated = false;
-        rImportOutput.moBitmap = aAnimation.Get(0).maBitmapEx;
+        rImportOutput.moBitmap = Bitmap(aAnimation.Get(0).maBitmapEx);
 
         if (aPrefSize.Width() && aPrefSize.Height())
         {
diff --git a/vcl/source/filter/ixbm/xbmread.cxx 
b/vcl/source/filter/ixbm/xbmread.cxx
index 10d3c35e4832..2f0e2417de3c 100644
--- a/vcl/source/filter/ixbm/xbmread.cxx
+++ b/vcl/source/filter/ixbm/xbmread.cxx
@@ -65,7 +65,7 @@ public:
 
     explicit XBMReader(SvStream& rStream);
 
-    ReadState ReadXBM(BitmapEx& rBitmapEx);
+    ReadState ReadXBM(Bitmap& rBitmap);
 };
 
 }
@@ -261,7 +261,7 @@ void XBMReader::ParseData( SvStream* pInStm, const OString& 
aLastLine, XBMFormat
     }
 }
 
-ReadState XBMReader::ReadXBM(BitmapEx& rBitmapEx)
+ReadState XBMReader::ReadXBM(Bitmap& rBitmap)
 {
     if (!mrStream.good())
         return XBMREAD_ERROR;
@@ -339,7 +339,7 @@ ReadState XBMReader::ReadXBM(BitmapEx& rBitmapEx)
 
         mpWriteAccess.reset();
         aBlackBmp.Erase( COL_BLACK );
-        rBitmapEx = BitmapEx(aBlackBmp, maBitmap);
+        rBitmap = Bitmap(BitmapEx(aBlackBmp, maBitmap));
         eReadState = XBMREAD_OK;
     }
 
@@ -349,11 +349,11 @@ ReadState XBMReader::ReadXBM(BitmapEx& rBitmapEx)
 VCL_DLLPUBLIC bool ImportXBM(SvStream& rStmeam, ImportOutput& rImportOutput)
 {
     XBMReader aXBMReader(rStmeam);
-    BitmapEx aBitmapEx;
-    ReadState eReadState = aXBMReader.ReadXBM(aBitmapEx);
+    Bitmap aBitmap;
+    ReadState eReadState = aXBMReader.ReadXBM(aBitmap);
     if (eReadState == XBMREAD_ERROR)
         return false;
-    rImportOutput.moBitmap = aBitmapEx;
+    rImportOutput.moBitmap = aBitmap;
     return true;
 }
 
diff --git a/vcl/source/filter/ixpm/xpmread.cxx 
b/vcl/source/filter/ixpm/xpmread.cxx
index fabc024f9878..b1a2e19a5ac7 100644
--- a/vcl/source/filter/ixpm/xpmread.cxx
+++ b/vcl/source/filter/ixpm/xpmread.cxx
@@ -111,7 +111,7 @@ private:
 public:
     explicit XPMReader(SvStream& rStream);
 
-    ReadState ReadXPM(BitmapEx& rBitmapEx);
+    ReadState ReadXPM(Bitmap& rBitmap);
 };
 
 }
@@ -122,7 +122,7 @@ XPMReader::XPMReader(SvStream& rStream)
 {
 }
 
-ReadState XPMReader::ReadXPM(BitmapEx& rBitmapEx)
+ReadState XPMReader::ReadXPM(Bitmap& rBitmap)
 {
     if (!mrStream.good())
         return XPMREAD_ERROR;
@@ -226,11 +226,11 @@ ReadState XPMReader::ReadXPM(BitmapEx& rBitmapEx)
         if (mpMaskWriterAccess)
         {
             mpMaskWriterAccess.reset();
-            rBitmapEx = BitmapEx(maBitmap, maMaskBitmap);
+            rBitmap = Bitmap(BitmapEx(maBitmap, maMaskBitmap));
         }
         else
         {
-            rBitmapEx = BitmapEx(maBitmap);
+            rBitmap = maBitmap;
         }
         eReadState = XPMREAD_OK;
     }
@@ -639,12 +639,12 @@ VCL_DLLPUBLIC bool ImportXPM(SvStream& rStream, 
ImportOutput& rImportOutput)
 {
     XPMReader aXPMReader(rStream);
 
-    BitmapEx aBitmapEx;
-    ReadState eReadState = aXPMReader.ReadXPM(aBitmapEx);
+    Bitmap aBitmap;
+    ReadState eReadState = aXPMReader.ReadXPM(aBitmap);
 
     if (eReadState == XPMREAD_ERROR)
         return false;
-    rImportOutput.moBitmap = aBitmapEx;
+    rImportOutput.moBitmap = aBitmap;
     return true;
 }
 
diff --git a/vcl/source/filter/jpeg/JpegReader.cxx 
b/vcl/source/filter/jpeg/JpegReader.cxx
index 094d7f2cbc10..28cdbbfffff4 100644
--- a/vcl/source/filter/jpeg/JpegReader.cxx
+++ b/vcl/source/filter/jpeg/JpegReader.cxx
@@ -248,7 +248,7 @@ ReadState JPEGReader::Read(ImportOutput& rImportOutput, 
GraphicFilterImportFlags
     if (bUseExistingBitmap || !mpBitmap->IsEmpty())
     {
         if (!bUseExistingBitmap)
-            rImportOutput.moBitmap = BitmapEx(*mpBitmap);
+            rImportOutput.moBitmap = *mpBitmap;
 
         bRet = true;
     }
diff --git a/vcl/source/filter/png/PngImageReader.cxx 
b/vcl/source/filter/png/PngImageReader.cxx
index 994962eb145b..2c688ecaa181 100644
--- a/vcl/source/filter/png/PngImageReader.cxx
+++ b/vcl/source/filter/png/PngImageReader.cxx
@@ -690,11 +690,11 @@ bool reader(SvStream& rStream, ImportOutput& 
rImportOutput,
             bool bSuccess = reader(aFrameStream, aFrameImportOutput);
             if (!bSuccess)
                 return false;
-            BitmapEx aFrameBitmapEx = *aFrameImportOutput.moBitmap;
+            Bitmap aFrameBitmap = *aFrameImportOutput.moBitmap;
             Point aStartPoint(aFctlChunk->x_offset, aFctlChunk->y_offset);
             Size aSize(aFctlChunk->width, aFctlChunk->height);
             AnimationFrame aAnimationFrame(
-                aFrameBitmapEx, aStartPoint, aSize,
+                BitmapEx(aFrameBitmap), aStartPoint, aSize,
                 NumDenToTime(aFctlChunk->delay_num, aFctlChunk->delay_den), 
aDisposal, aBlend);
             aAnimation.Insert(aAnimationFrame);
         }
@@ -775,7 +775,7 @@ bool PngImageReader::read(Bitmap& rBitmap)
     ImportOutput aImportOutput;
     bool bRet = reader(mrStream, aImportOutput);
     if (bRet)
-        rBitmap = Bitmap(*aImportOutput.moBitmap);
+        rBitmap = *aImportOutput.moBitmap;
     return bRet;
 }
 
@@ -787,7 +787,7 @@ Bitmap PngImageReader::read()
     if (read(aImportOutput))
     {
         if (!aImportOutput.mbIsAnimated)
-            return Bitmap(*aImportOutput.moBitmap);
+            return *aImportOutput.moBitmap;
         else
             return Bitmap(aImportOutput.moAnimation->GetBitmapEx());
     }
commit 4997d1f244eecb8ba328c2793ca0fd29a0ca4237
Author:     Noel Grandin <noel.gran...@collabora.co.uk>
AuthorDate: Mon Aug 11 16:26:56 2025 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Mon Aug 11 18:57:08 2025 +0200

    BitmapEx->Bitmap in PngImageReader
    
    Now that Bitmap can handle transparency
    
    Change-Id: I6cc7058261b8f33a7efcebe2a74030346311dd42
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/189249
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/vcl/source/filter/graphicfilter.cxx 
b/vcl/source/filter/graphicfilter.cxx
index 100ef71b26c0..222890883c7c 100644
--- a/vcl/source/filter/graphicfilter.cxx
+++ b/vcl/source/filter/graphicfilter.cxx
@@ -478,9 +478,6 @@ struct GraphicImportContext
     std::shared_ptr<ImportOutput> m_pImportOutput;
     /// Write pixel data using this access.
     std::unique_ptr<BitmapScopedWriteAccess> m_pAccess;
-    std::unique_ptr<BitmapScopedWriteAccess> m_pAlphaAccess;
-    // Need to have an AlphaMask instance to keep its lifetime.
-    AlphaMask mAlphaMask;
     /// Signals if import finished correctly.
     ErrCode m_nStatus = ERRCODE_GRFILTER_FILTERERROR;
     /// Original graphic format.
@@ -526,7 +523,7 @@ void GraphicImportTask::doImport(GraphicImportContext& 
rContext)
     {
         vcl::ImportPNG(*rContext.m_pStream, *rContext.m_pImportOutput,
                 rContext.m_nImportFlags | 
GraphicFilterImportFlags::UseExistingBitmap,
-                rContext.m_pAccess.get(), rContext.m_pAlphaAccess.get());
+                rContext.m_pAccess.get());
 
         if (!rContext.m_pImportOutput->moBitmap || 
rContext.m_pImportOutput->moBitmap->IsEmpty())
         {
@@ -587,23 +584,11 @@ void GraphicFilter::ImportGraphics(std::vector< 
std::shared_ptr<Graphic> >& rGra
                 else if (aFilterName.equalsIgnoreAsciiCase(IMP_PNG))
                 {
                     rContext.m_eLinkType = GfxLinkType::NativePng;
-                    if (vcl::ImportPNG( *rContext.m_pStream, 
*rContext.m_pImportOutput, rContext.m_nImportFlags | 
GraphicFilterImportFlags::OnlyCreateBitmap, nullptr, nullptr))
+                    if (vcl::ImportPNG( *rContext.m_pStream, 
*rContext.m_pImportOutput, rContext.m_nImportFlags | 
GraphicFilterImportFlags::OnlyCreateBitmap, nullptr))
                     {
                         const BitmapEx& rBitmapEx = 
*rContext.m_pImportOutput->moBitmap;
                         Bitmap& rBitmap = 
const_cast<Bitmap&>(rBitmapEx.GetBitmap());
                         rContext.m_pAccess = 
std::make_unique<BitmapScopedWriteAccess>(rBitmap);
-                        if(rBitmapEx.IsAlpha())
-                        {
-                            // The separate alpha bitmap causes a number of 
complications. Not only
-                            // we need to have an extra bitmap access for it, 
but we also need
-                            // to keep an AlphaMask instance in the context. 
This is because
-                            // BitmapEx internally keeps Bitmap and not 
AlphaMask (because the Bitmap
-                            // may be also a mask, not alpha). So 
BitmapEx::GetAlpha() returns
-                            // a temporary, and direct access to the Bitmap 
wouldn't work
-                            // with AlphaScopedBitmapAccess. *sigh*
-                            rContext.mAlphaMask = rBitmapEx.GetAlphaMask();
-                            rContext.m_pAlphaAccess = 
std::make_unique<BitmapScopedWriteAccess>(rContext.mAlphaMask);
-                        }
                         rContext.m_pStream->Seek(rContext.m_nStreamBegin);
                         if (bThreads)
                             
rSharedPool.pushTask(std::make_unique<GraphicImportTask>(pTag, rContext));
@@ -625,12 +610,6 @@ void GraphicFilter::ImportGraphics(std::vector< 
std::shared_ptr<Graphic> >& rGra
     for (auto& rContext : aContexts)
     {
         rContext.m_pAccess.reset();
-        rContext.m_pAlphaAccess.reset();
-        if (!rContext.mAlphaMask.IsEmpty()) // Need to move the AlphaMask back 
to the BitmapEx.
-        {
-            BitmapEx 
aBitmapEx(rContext.m_pImportOutput->moBitmap->GetBitmap(), rContext.mAlphaMask);
-            rContext.m_pImportOutput->moBitmap = aBitmapEx;
-        }
 
         std::shared_ptr<Graphic> pGraphic;
 
diff --git a/vcl/source/filter/png/PngImageReader.cxx 
b/vcl/source/filter/png/PngImageReader.cxx
index 4c88b0dbaf23..994962eb145b 100644
--- a/vcl/source/filter/png/PngImageReader.cxx
+++ b/vcl/source/filter/png/PngImageReader.cxx
@@ -332,8 +332,7 @@ bool fcTLbeforeIDAT(SvStream& rStream)
 
 bool reader(SvStream& rStream, ImportOutput& rImportOutput,
             GraphicFilterImportFlags nImportFlags = 
GraphicFilterImportFlags::NONE,
-            BitmapScopedWriteAccess* pAccess = nullptr,
-            BitmapScopedWriteAccess* pAlphaAccess = nullptr)
+            BitmapScopedWriteAccess* pAccess = nullptr)
 {
     if (!isPng(rStream))
         return false;
@@ -359,12 +358,9 @@ bool reader(SvStream& rStream, ImportOutput& rImportOutput,
     // All variables holding resources need to be declared here in order to be
     // properly cleaned up in case of an error, otherwise libpng's longjmp()
     // jumps over the destructor calls.
-    BitmapEx aBitmapEx;
     Bitmap aBitmap;
-    AlphaMask aBitmapAlpha;
     Size prefSize;
     BitmapScopedWriteAccess pWriteAccessInstance;
-    BitmapScopedWriteAccess pWriteAccessAlphaInstance;
     const bool bFuzzing = comphelper::IsFuzzing();
     const bool bOnlyCreateBitmap
         = static_cast<bool>(nImportFlags & 
GraphicFilterImportFlags::OnlyCreateBitmap);
@@ -462,9 +458,7 @@ bool reader(SvStream& rStream, ImportOutput& rImportOutput,
                     aBitmap = Bitmap(Size(width, height), 
vcl::PixelFormat::N24_BPP);
                     break;
                 case PNG_COLOR_TYPE_RGBA:
-                    aBitmap = Bitmap(Size(width, height), 
vcl::PixelFormat::N24_BPP);
-                    aBitmapAlpha = AlphaMask(Size(width, height), nullptr);
-                    aBitmapAlpha.Erase(0); // opaque
+                    aBitmap = Bitmap(Size(width, height), 
vcl::PixelFormat::N32_BPP);
                     break;
                 case PNG_COLOR_TYPE_GRAY:
                     aBitmap = Bitmap(Size(width, height), 
vcl::PixelFormat::N8_BPP,
@@ -476,28 +470,18 @@ bool reader(SvStream& rStream, ImportOutput& 
rImportOutput,
 
             if (bOnlyCreateBitmap)
             {
-                if (!aBitmapAlpha.IsEmpty())
-                    aBitmapEx = BitmapEx(aBitmap, aBitmapAlpha);
-                else
-                    aBitmapEx = BitmapEx(aBitmap);
                 if (!prefSize.IsEmpty())
                 {
-                    aBitmapEx.SetPrefMapMode(MapMode(MapUnit::Map100thMM));
-                    aBitmapEx.SetPrefSize(prefSize);
+                    aBitmap.SetPrefMapMode(MapMode(MapUnit::Map100thMM));
+                    aBitmap.SetPrefSize(prefSize);
                 }
-                rImportOutput.moBitmap = aBitmapEx;
+                rImportOutput.moBitmap = aBitmap;
                 return true;
             }
 
             pWriteAccessInstance = aBitmap;
             if (!pWriteAccessInstance)
                 return false;
-            if (!aBitmapAlpha.IsEmpty())
-            {
-                pWriteAccessAlphaInstance = aBitmapAlpha;
-                if (!pWriteAccessAlphaInstance)
-                    return false;
-            }
         }
     }
     catch (const std::runtime_error& ex)
@@ -505,13 +489,10 @@ bool reader(SvStream& rStream, ImportOutput& 
rImportOutput,
         std::cerr << "libpng error: " << ex.what() << std::endl;
 
         pWriteAccessInstance.reset();
-        pWriteAccessAlphaInstance.reset();
         return false;
     }
 
     BitmapScopedWriteAccess& pWriteAccess = pAccess ? *pAccess : 
pWriteAccessInstance;
-    BitmapScopedWriteAccess& pWriteAccessAlpha
-        = pAlphaAccess ? *pAlphaAccess : pWriteAccessAlphaInstance;
 
     try
     {
@@ -533,9 +514,6 @@ bool reader(SvStream& rStream, ImportOutput& rImportOutput,
         else if (colorType == PNG_COLOR_TYPE_RGB_ALPHA)
         {
             size_t aRowSizeBytes = png_get_rowbytes(pPng, pInfo);
-            ScanlineFormat eFormat = pWriteAccess->GetScanlineFormat();
-            if (eFormat == ScanlineFormat::N24BitTcBgr)
-                png_set_bgr(pPng);
 
             if (nNumberOfPasses == 1)
             {
@@ -544,17 +522,12 @@ bool reader(SvStream& rStream, ImportOutput& 
rImportOutput,
                 for (png_uint_32 y = 0; y < height; y++)
                 {
                     Scanline pScanline = pWriteAccess->GetScanline(y);
-                    Scanline pScanAlpha = pWriteAccessAlpha->GetScanline(y);
                     png_bytep pRow = aRow.data();
                     png_read_row(pPng, pRow, nullptr);
-                    size_t iAlpha = 0;
-                    size_t iColor = 0;
                     for (size_t i = 0; i < aRowSizeBytes; i += 4)
                     {
-                        pScanline[iColor++] = pRow[i + 0];
-                        pScanline[iColor++] = pRow[i + 1];
-                        pScanline[iColor++] = pRow[i + 2];
-                        pScanAlpha[iAlpha++] = pRow[i + 3];
+                        Color aCol(ColorAlpha, pRow[i + 3], pRow[i + 0], 
pRow[i + 1], pRow[i + 2]);
+                        pWriteAccess->SetPixelOnData(pScanline, i / 4, aCol);
                     }
                 }
             }
@@ -567,19 +540,18 @@ bool reader(SvStream& rStream, ImportOutput& 
rImportOutput,
                 {
                     for (png_uint_32 y = 0; y < height; y++)
                     {
-                        Scanline pScanline = pWriteAccess->GetScanline(y);
-                        Scanline pScanAlpha = 
pWriteAccessAlpha->GetScanline(y);
                         png_bytep pRow = aRows[y].data();
                         png_read_row(pPng, pRow, nullptr);
-                        size_t iAlpha = 0;
-                        size_t iColor = 0;
-                        for (size_t i = 0; i < aRowSizeBytes; i += 4)
-                        {
-                            pScanline[iColor++] = pRow[i + 0];
-                            pScanline[iColor++] = pRow[i + 1];
-                            pScanline[iColor++] = pRow[i + 2];
-                            pScanAlpha[iAlpha++] = pRow[i + 3];
-                        }
+                    }
+                }
+                for (png_uint_32 y = 0; y < height; y++)
+                {
+                    Scanline pScanline = pWriteAccess->GetScanline(y);
+                    png_bytep pRow = aRows[y].data();
+                    for (size_t i = 0; i < aRowSizeBytes; i += 4)
+                    {
+                        Color aCol(ColorAlpha, pRow[i + 3], pRow[i + 0], 
pRow[i + 1], pRow[i + 2]);
+                        pWriteAccess->SetPixelOnData(pScanline, i / 4, aCol);
                     }
                 }
             }
@@ -595,30 +567,26 @@ bool reader(SvStream& rStream, ImportOutput& 
rImportOutput,
                 }
             }
         }
+        else
+            assert(false);
     }
     catch (const std::runtime_error& ex)
     {
         std::cerr << "libpng error: " << ex.what() << std::endl;
 
         pWriteAccessInstance.reset();
-        pWriteAccessAlphaInstance.reset();
 
         if (!bUseExistingBitmap)
         {
             // Set the bitmap if it contains something, even on failure. This 
allows
             // reading images that are only partially broken.
             pWriteAccessInstance.reset();
-            pWriteAccessAlphaInstance.reset();
-            if (!aBitmap.IsEmpty() && !aBitmapAlpha.IsEmpty())
-                aBitmapEx = BitmapEx(aBitmap, aBitmapAlpha);
-            else if (!aBitmap.IsEmpty())
-                aBitmapEx = BitmapEx(aBitmap);
-            if (!aBitmapEx.IsEmpty() && !prefSize.IsEmpty())
+            if (!aBitmap.IsEmpty() && !prefSize.IsEmpty())
             {
-                aBitmapEx.SetPrefMapMode(MapMode(MapUnit::Map100thMM));
-                aBitmapEx.SetPrefSize(prefSize);
+                aBitmap.SetPrefMapMode(MapMode(MapUnit::Map100thMM));
+                aBitmap.SetPrefSize(prefSize);
             }
-            rImportOutput.moBitmap = aBitmapEx;
+            rImportOutput.moBitmap = aBitmap;
         }
         return false;
     }
@@ -634,17 +602,12 @@ bool reader(SvStream& rStream, ImportOutput& 
rImportOutput,
         if (!bUseExistingBitmap)
         {
             pWriteAccessInstance.reset();
-            pWriteAccessAlphaInstance.reset();
-            if (!aBitmap.IsEmpty() && !aBitmapAlpha.IsEmpty())
-                aBitmapEx = BitmapEx(aBitmap, aBitmapAlpha);
-            else if (!aBitmap.IsEmpty())
-                aBitmapEx = BitmapEx(aBitmap);
-            if (!aBitmapEx.IsEmpty() && !prefSize.IsEmpty())
+            if (!aBitmap.IsEmpty() && !prefSize.IsEmpty())
             {
-                aBitmapEx.SetPrefMapMode(MapMode(MapUnit::Map100thMM));
-                aBitmapEx.SetPrefSize(prefSize);
+                aBitmap.SetPrefMapMode(MapMode(MapUnit::Map100thMM));
+                aBitmap.SetPrefSize(prefSize);
             }
-            rImportOutput.moBitmap = aBitmapEx;
+            rImportOutput.moBitmap = aBitmap;
         }
         // Return true in this case, as we read the bitmap
         return true;
@@ -653,15 +616,10 @@ bool reader(SvStream& rStream, ImportOutput& 
rImportOutput,
     if (!bUseExistingBitmap)
     {
         pWriteAccess.reset();
-        pWriteAccessAlpha.reset();
-        if (!aBitmapAlpha.IsEmpty())
-            aBitmapEx = BitmapEx(aBitmap, aBitmapAlpha);
-        else
-            aBitmapEx = BitmapEx(aBitmap);
         if (!prefSize.IsEmpty())
         {
-            aBitmapEx.SetPrefMapMode(MapMode(MapUnit::Map100thMM));
-            aBitmapEx.SetPrefSize(prefSize);
+            aBitmap.SetPrefMapMode(MapMode(MapUnit::Map100thMM));
+            aBitmap.SetPrefSize(prefSize);
         }
     }
 
@@ -691,7 +649,7 @@ bool reader(SvStream& rStream, ImportOutput& rImportOutput,
                 if (aDisposal == Disposal::Previous)
                     aDisposal = Disposal::Back;
                 AnimationFrame aAnimationFrame(
-                    aBitmapEx, aFirstPoint, aCanvasSize,
+                    BitmapEx(aBitmap), aFirstPoint, aCanvasSize,
                     NumDenToTime(aFctlChunk->delay_num, 
aFctlChunk->delay_den), aDisposal, aBlend);
                 aAnimation.Insert(aAnimationFrame);
             }
@@ -746,7 +704,7 @@ bool reader(SvStream& rStream, ImportOutput& rImportOutput,
     }
     else
     {
-        rImportOutput.moBitmap = aBitmapEx;
+        rImportOutput.moBitmap = aBitmap;
     }
 
     return true;
@@ -848,12 +806,11 @@ BinaryDataContainer 
PngImageReader::getMicrosoftGifChunk(SvStream& rStream)
 }
 
 bool ImportPNG(SvStream& rInputStream, ImportOutput& rImportOutput,
-               GraphicFilterImportFlags nImportFlags, BitmapScopedWriteAccess* 
pAccess,
-               BitmapScopedWriteAccess* pAlphaAccess)
+               GraphicFilterImportFlags nImportFlags, BitmapScopedWriteAccess* 
pAccess)
 {
     // Creating empty bitmaps should be practically a no-op, and thus 
thread-safe.
     ImportOutput aImportOutput;
-    if (reader(rInputStream, aImportOutput, nImportFlags, pAccess, 
pAlphaAccess))
+    if (reader(rInputStream, aImportOutput, nImportFlags, pAccess))
     {
         if (!(nImportFlags & GraphicFilterImportFlags::UseExistingBitmap))
             rImportOutput = std::move(aImportOutput);
diff --git a/vcl/source/filter/png/png.hxx b/vcl/source/filter/png/png.hxx
index f3cd874f07ad..8c9e7dea4bc6 100644
--- a/vcl/source/filter/png/png.hxx
+++ b/vcl/source/filter/png/png.hxx
@@ -26,8 +26,7 @@
 namespace vcl
 {
 bool ImportPNG(SvStream& rInputStream, ImportOutput& rImportOutput,
-               GraphicFilterImportFlags nImportFlags, BitmapScopedWriteAccess* 
pAccess,
-               BitmapScopedWriteAccess* pAlphaAccess);
+               GraphicFilterImportFlags nImportFlags, BitmapScopedWriteAccess* 
pAccess);
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Reply via email to