[Libreoffice-commits] core.git: Branch 'libreoffice-7-1' - filter/source include/vcl

Noel Grandin (via logerrit) logerrit at kemper.freedesktop.org
Thu Jun 10 07:11:38 UTC 2021


 filter/source/graphicfilter/ipsd/ipsd.cxx |    9 +++++----
 include/vcl/RawBitmap.hxx                 |    6 ++++++
 2 files changed, 11 insertions(+), 4 deletions(-)

New commits:
commit 289a9f906bdef65f12ee0acb7069d6f39ac825f4
Author:     Noel Grandin <noel.grandin at collabora.co.uk>
AuthorDate: Wed Jun 9 15:24:19 2021 +0200
Commit:     Noel Grandin <noel.grandin at collabora.co.uk>
CommitDate: Thu Jun 10 09:11:02 2021 +0200

    tdf#142629 import psd image with transparent background
    
    regression from
        commit 2168d709805a847ac012ff87b06e081ca139d064
        Date:   Mon Feb 12 15:29:10 2018 +0200
        use RawBitmap in PSDReader
    
    Change-Id: I8d547d3cca7fb8fc90a8d9382e054b4d4b2f3519
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/116916
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>
    Signed-off-by: Xisco Fauli <xiscofauli at libreoffice.org>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/116941

diff --git a/filter/source/graphicfilter/ipsd/ipsd.cxx b/filter/source/graphicfilter/ipsd/ipsd.cxx
index 3c219870f1d2..90b7746029b8 100644
--- a/filter/source/graphicfilter/ipsd/ipsd.cxx
+++ b/filter/source/graphicfilter/ipsd/ipsd.cxx
@@ -119,7 +119,7 @@ bool PSDReader::ReadPSD(Graphic & rGraphic )
     }
 
     Size aBitmapSize( mpFileHeader->nColumns, mpFileHeader->nRows );
-    mpBitmap.reset( new vcl::bitmap::RawBitmap( aBitmapSize, 24 ) );
+    mpBitmap.reset( new vcl::bitmap::RawBitmap( aBitmapSize, mbTransparent ? 32 : 24 ) );
     if ( mpPalette && mbStatus )
     {
         mvPalette.resize( 256 );
@@ -129,8 +129,9 @@ bool PSDReader::ReadPSD(Graphic & rGraphic )
         }
     }
 
-    if ((mnDestBitDepth == 1 || mnDestBitDepth == 8 || mbTransparent) && mvPalette.empty())
+    if ((mnDestBitDepth == 1 || mnDestBitDepth == 8) && mvPalette.empty())
     {
+        SAL_WARN("vcl", "no palette, but bit depth is " << mnDestBitDepth);
         mbStatus = false;
         return mbStatus;
     }
@@ -721,7 +722,7 @@ bool PSDReader::ImplReadBody()
                     m_rPSD.ReadUChar( nDummy );
                 for ( sal_uInt16 i = 0; i < ( -nRunCount + 1 ); i++ )
                 {
-                    mpBitmap->SetPixel(nY, nX, SanitizePaletteIndex(mvPalette, nDat));
+                    mpBitmap->SetAlpha(nY, nX, nDat ? 0 : 255);
                     if ( ++nX == mpFileHeader->nColumns )
                     {
                         nX = 0;
@@ -742,7 +743,7 @@ bool PSDReader::ImplReadBody()
                         nDat = 1;
                     if ( mpFileHeader->nDepth == 16 )   // 16 bit depth is to be skipped
                         m_rPSD.ReadUChar( nDummy );
-                    mpBitmap->SetPixel(nY, nX, SanitizePaletteIndex(mvPalette, nDat));
+                    mpBitmap->SetAlpha(nY, nX, nDat ? 0 : 255);
                     if ( ++nX == mpFileHeader->nColumns )
                     {
                         nX = 0;
diff --git a/include/vcl/RawBitmap.hxx b/include/vcl/RawBitmap.hxx
index 7fac44a166af..710559d11d48 100644
--- a/include/vcl/RawBitmap.hxx
+++ b/include/vcl/RawBitmap.hxx
@@ -49,6 +49,12 @@ public:
         if (mnBitCount == 32)
             mpData[p] = nColor.GetTransparency();
     }
+    void SetAlpha(tools::Long nY, tools::Long nX, sal_uInt8 nAlpha)
+    {
+        assert(mnBitCount == 32);
+        tools::Long p = (nY * maSize.getWidth() + nX) * (mnBitCount / 8) + 3;
+        mpData[p] = nAlpha;
+    }
     Color GetPixel(tools::Long nY, tools::Long nX) const
     {
         tools::Long p = (nY * maSize.getWidth() + nX) * mnBitCount / 8;


More information about the Libreoffice-commits mailing list