[Libreoffice-commits] core.git: filter/source

Noel Grandin noel.grandin at collabora.co.uk
Tue Feb 13 13:06:30 UTC 2018


 filter/source/graphicfilter/ipict/ipict.cxx |  151 ++++++++++------------------
 1 file changed, 58 insertions(+), 93 deletions(-)

New commits:
commit 915fd2aa300ba822171407fe46e60c2134fc82cb
Author: Noel Grandin <noel.grandin at collabora.co.uk>
Date:   Mon Feb 12 12:37:13 2018 +0200

    use BitmapEx and RawBitmap in PictReader
    
    part of making Bitmap an internal detail of vcl
    
    Change-Id: Ia0ef02ff257b71ca07dd294592641cc64a80dbfc
    Reviewed-on: https://gerrit.libreoffice.org/49635
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>

diff --git a/filter/source/graphicfilter/ipict/ipict.cxx b/filter/source/graphicfilter/ipict/ipict.cxx
index 8cbe27bc71f7..c34b55bec422 100644
--- a/filter/source/graphicfilter/ipict/ipict.cxx
+++ b/filter/source/graphicfilter/ipict/ipict.cxx
@@ -19,7 +19,7 @@
 
 #include <string.h>
 #include <osl/thread.h>
-#include <vcl/bitmapaccess.hxx>
+#include <vcl/BitmapTools.hxx>
 #include <vcl/graph.hxx>
 #include <tools/poly.hxx>
 #include <tools/fract.hxx>
@@ -223,7 +223,7 @@ private:
 
     sal_uLong ReadAndDrawText();
 
-    sal_uLong ReadPixMapEtc(Bitmap & rBitmap, bool bBaseAddr, bool bColorTable,
+    sal_uLong ReadPixMapEtc(BitmapEx & rBitmap, bool bBaseAddr, bool bColorTable,
                         tools::Rectangle * pSrcRect, tools::Rectangle * pDestRect,
                         bool bMode, bool bMaskRgn);
 
@@ -259,54 +259,47 @@ public:
 
 };
 
-static void SetByte(sal_uInt16& nx, Scanline pScanline, BitmapWriteAccess* pAcc, sal_uInt16 nPixelSize, sal_uInt8 nDat, sal_uInt16 nWidth)
+static void SetByte(sal_uInt16& nx, sal_uInt16 ny, vcl::bitmap::RawBitmap& rBitmap, sal_uInt16 nPixelSize, sal_uInt8 nDat, sal_uInt16 nWidth, std::vector<Color> const & rvPalette)
 {
     switch (nPixelSize)
     {
         case 1:
-            pAcc->SetPixelOnData(pScanline, nx++, BitmapColor(nDat >> 7));
+            rBitmap.SetPixel(ny, nx++, rvPalette[(nDat >> 7) & 1]);
             if ( nx == nWidth ) break;
-            pAcc->SetPixelOnData(pScanline, nx++, BitmapColor(nDat >> 6));
+            rBitmap.SetPixel(ny, nx++, rvPalette[(nDat >> 6) & 1]);
             if ( nx == nWidth ) break;
-            pAcc->SetPixelOnData(pScanline, nx++, BitmapColor(nDat >> 5));
+            rBitmap.SetPixel(ny, nx++, rvPalette[(nDat >> 5) & 1]);
             if ( nx == nWidth ) break;
-            pAcc->SetPixelOnData(pScanline, nx++, BitmapColor(nDat >> 4));
+            rBitmap.SetPixel(ny, nx++, rvPalette[(nDat >> 4) & 1]);
             if ( nx == nWidth ) break;
-            pAcc->SetPixelOnData(pScanline, nx++, BitmapColor(nDat >> 3));
+            rBitmap.SetPixel(ny, nx++, rvPalette[(nDat >> 3) & 1]);
             if ( nx == nWidth ) break;
-            pAcc->SetPixelOnData(pScanline, nx++, BitmapColor(nDat >> 2));
+            rBitmap.SetPixel(ny, nx++, rvPalette[(nDat >> 2) & 1]);
             if ( nx == nWidth ) break;
-            pAcc->SetPixelOnData(pScanline, nx++, BitmapColor(nDat >> 1));
+            rBitmap.SetPixel(ny, nx++, rvPalette[(nDat >> 1) & 1]);
             if ( nx == nWidth ) break;
-            pAcc->SetPixelOnData(pScanline, nx++, BitmapColor(nDat));
+            rBitmap.SetPixel(ny, nx++, rvPalette[nDat & 1]);
             break;
         case 2:
-            pAcc->SetPixelOnData(pScanline, nx++, BitmapColor(nDat >> 6));
+            rBitmap.SetPixel(ny, nx++, rvPalette[nDat >> 6]);
             if ( nx == nWidth ) break;
-            pAcc->SetPixelOnData(pScanline, nx++, BitmapColor((nDat>>4)&3));
+            rBitmap.SetPixel(ny, nx++, rvPalette[(nDat>>4)&3]);
             if ( nx == nWidth ) break;
-            pAcc->SetPixelOnData(pScanline, nx++, BitmapColor((nDat>>2)&3));
+            rBitmap.SetPixel(ny, nx++, rvPalette[(nDat>>2)&3]);
             if ( nx == nWidth ) break;
-            pAcc->SetPixelOnData(pScanline, nx++, BitmapColor(nDat & 3));
+            rBitmap.SetPixel(ny, nx++, rvPalette[nDat & 3]);
             break;
         case 4:
-            pAcc->SetPixelOnData(pScanline, nx++, BitmapColor(nDat >> 4));
+            rBitmap.SetPixel(ny, nx++, rvPalette[nDat >> 4]);
             if ( nx == nWidth ) break;
-            pAcc->SetPixelOnData(pScanline, nx++, BitmapColor(nDat));
+            rBitmap.SetPixel(ny, nx++, rvPalette[nDat & 0x0f]);
             break;
         case 8:
-            pAcc->SetPixelOnData(pScanline, nx++, BitmapColor(nDat));
+            rBitmap.SetPixel(ny, nx++, rvPalette[nDat]);
             break;
     }
 }
 
-#define BITMAPERROR                                     \
-{                                                       \
-    if ( pAcc )                                         \
-        Bitmap::ReleaseAccess( pAcc );                  \
-    return 0xffffffff;                                  \
-}
-
 //=================== methods of PictReader ==============================
 rtl_TextEncoding PictReader::GetTextEncoding (sal_uInt16 fId) {
   static bool first = true;
@@ -490,7 +483,7 @@ sal_uLong PictReader::ReadPixPattern(PictReader::Pattern &pattern)
 
     sal_uLong nDataSize;
     sal_uInt16 nPatType;
-    Bitmap aBMP;
+    BitmapEx aBMP;
 
     pPict->ReadUInt16( nPatType );
     if (nPatType==1) {
@@ -709,23 +702,10 @@ sal_uLong PictReader::ReadAndDrawText()
     return nDataLen;
 }
 
-namespace
-{
-    BitmapWriteAccess* initBitmap(Bitmap &rBitmap, sal_uInt16 nWidth, sal_uInt16 nHeight, sal_uInt16 nDstBitCount, const BitmapPalette &rPalette)
-    {
-        rBitmap = Bitmap(Size(nWidth, nHeight), nDstBitCount);
-        BitmapWriteAccess* pAcc = rBitmap.AcquireWriteAccess();
-        if (!pAcc)
-            return nullptr;
-        pAcc->SetPalette(rPalette);
-        return pAcc;
-    }
-}
-
-sal_uLong PictReader::ReadPixMapEtc( Bitmap &rBitmap, bool bBaseAddr, bool bColorTable, tools::Rectangle* pSrcRect,
+sal_uLong PictReader::ReadPixMapEtc( BitmapEx &rBitmap, bool bBaseAddr, bool bColorTable, tools::Rectangle* pSrcRect,
                                     tools::Rectangle* pDestRect, bool bMode, bool bMaskRgn )
 {
-    Bitmap     aBitmap;
+    std::unique_ptr<vcl::bitmap::RawBitmap> pBitmap;
     sal_uInt16 nPackType(0), nPixelSize(0), nCmpCount(0), nCmpSize(0);
     sal_uInt8  nDat(0), nRed(0), nGreen(0), nBlue(0);
 
@@ -754,7 +734,7 @@ sal_uLong PictReader::ReadPixMapEtc( Bitmap &rBitmap, bool bBaseAddr, bool bColo
         return 0xffffffff;
     sal_uInt16 nDstBitCount = 1;
 
-    BitmapPalette aPalette;
+    std::vector<Color> aPalette;
     const bool bNotMonoChrome = (nRowBytes & 0x8000) != 0;
     if (bNotMonoChrome)
     {   // it is a PixMap
@@ -786,14 +766,14 @@ sal_uLong PictReader::ReadPixMapEtc( Bitmap &rBitmap, bool bBaseAddr, bool bColo
 
             ++nColTabSize;
 
-            aPalette = BitmapPalette(nColTabSize);
+            aPalette.resize(nColTabSize);
 
             for (size_t i = 0; i < nColTabSize; ++i)
             {
                 pPict->SeekRel(2);
                 sal_uInt8 nDummy;
                 pPict->ReadUChar( nRed ).ReadUChar( nDummy ).ReadUChar( nGreen ).ReadUChar( nDummy ).ReadUChar( nBlue ).ReadUChar( nDummy );
-                aPalette[i] = BitmapColor(nRed, nGreen, nBlue);
+                aPalette[i] = Color(nRed, nGreen, nBlue);
             }
 
             nDataSize += 8 + nColTabSize * 8;
@@ -804,9 +784,9 @@ sal_uLong PictReader::ReadPixMapEtc( Bitmap &rBitmap, bool bBaseAddr, bool bColo
         nRowBytes &= 0x3fff;
         nPixelSize = nCmpCount = nCmpSize = 1;
         nDataSize += 10;
-        aPalette = BitmapPalette(2);
-        aPalette[0] = BitmapColor(0xff, 0xff, 0xff);
-        aPalette[1] = BitmapColor(0, 0, 0);
+        aPalette.resize(2);
+        aPalette[0] = Color(0xff, 0xff, 0xff);
+        aPalette[1] = Color(0, 0, 0);
     }
 
     // conditionally read source rectangle:
@@ -844,8 +824,6 @@ sal_uLong PictReader::ReadPixMapEtc( Bitmap &rBitmap, bool bBaseAddr, bool bColo
         nDataSize += static_cast<sal_uLong>(nSize);
     }
 
-    BitmapWriteAccess*  pAcc = nullptr;
-
     // read and write Bitmap bits:
     if ( nPixelSize == 1 || nPixelSize == 2 || nPixelSize == 4 || nPixelSize == 8 )
     {
@@ -872,12 +850,10 @@ sal_uLong PictReader::ReadPixMapEtc( Bitmap &rBitmap, bool bBaseAddr, bool bColo
                 return 0xffffffff;
         }
 
-        if ( ( pAcc = initBitmap(aBitmap, nWidth, nHeight, nDstBitCount, aPalette) ) == nullptr )
-            return 0xffffffff;
+        pBitmap.reset(new vcl::bitmap::RawBitmap( Size(nWidth, nHeight) ));
 
         for (sal_uInt16 ny = 0; ny < nHeight; ++ny)
         {
-            Scanline pScanline = pAcc->GetScanline(ny);
             sal_uInt16 nx = 0;
             if ( nRowBytes < 8 || nPackType == 1 )
             {
@@ -885,7 +861,7 @@ sal_uLong PictReader::ReadPixMapEtc( Bitmap &rBitmap, bool bBaseAddr, bool bColo
                 {
                     pPict->ReadUChar( nDat );
                     if ( nx < nWidth )
-                        SetByte(nx, pScanline, pAcc, nPixelSize, nDat, nWidth);
+                        SetByte(nx, ny, *pBitmap, nPixelSize, nDat, nWidth, aPalette);
                 }
                 nDataSize += nRowBytes;
             }
@@ -916,7 +892,7 @@ sal_uLong PictReader::ReadPixMapEtc( Bitmap &rBitmap, bool bBaseAddr, bool bColo
                         {
                             pPict->ReadUChar( nDat );
                             if ( nx < nWidth )
-                                SetByte(nx, pScanline, pAcc, nPixelSize, nDat, nWidth);
+                                SetByte(nx, ny, *pBitmap, nPixelSize, nDat, nWidth, aPalette);
                         }
                         nByteCount -= 1 + nCount;
                     }
@@ -927,7 +903,7 @@ sal_uLong PictReader::ReadPixMapEtc( Bitmap &rBitmap, bool bBaseAddr, bool bColo
                         for (size_t i = 0; i < nCount; ++i)
                         {
                             if ( nx < nWidth )
-                                SetByte(nx, pScanline, pAcc, nPixelSize, nDat, nWidth);
+                                SetByte(nx, ny, *pBitmap, nPixelSize, nDat, nWidth, aPalette);
                         }
                         nByteCount -= 2;
                     }
@@ -956,12 +932,10 @@ sal_uLong PictReader::ReadPixMapEtc( Bitmap &rBitmap, bool bBaseAddr, bool bColo
                 return 0xffffffff;
         }
 
-        if ( ( pAcc = initBitmap(aBitmap, nWidth, nHeight, nDstBitCount, aPalette) ) == nullptr )
-            return 0xffffffff;
+        pBitmap.reset(new vcl::bitmap::RawBitmap( Size(nWidth, nHeight) ));
 
         for (sal_uInt16 ny = 0; ny < nHeight; ++ny)
         {
-            Scanline pScanline = pAcc->GetScanline( ny );
             sal_uInt16 nx = 0;
             if ( nRowBytes < 8 || nPackType == 1 )
             {
@@ -971,7 +945,7 @@ sal_uLong PictReader::ReadPixMapEtc( Bitmap &rBitmap, bool bBaseAddr, bool bColo
                     nRed = static_cast<sal_uInt8>( nD >> 7 );
                     nGreen = static_cast<sal_uInt8>( nD >> 2 );
                     nBlue = static_cast<sal_uInt8>( nD << 3 );
-                    pAcc->SetPixelOnData(pScanline, nx++, BitmapColor(nRed, nGreen, nBlue));
+                    pBitmap->SetPixel(ny, nx++, Color(nRed, nGreen, nBlue));
                 }
                 nDataSize += static_cast<sal_uLong>(nWidth) * 2;
             }
@@ -998,7 +972,7 @@ sal_uLong PictReader::ReadPixMapEtc( Bitmap &rBitmap, bool bBaseAddr, bool bColo
                         if ( nCount + nx > nWidth)
                             nCount = nWidth - nx;
                         if (pPict->remainingSize() < sizeof(sal_uInt16) * nCount)
-                            BITMAPERROR;
+                            return 0xffffffff;
                         /* SJ: the RLE decoding seems not to be correct here,
                            I don't want to change this until I have a bugdoc for
                            this case. Have a look at 32bit, there I changed the
@@ -1010,13 +984,13 @@ sal_uLong PictReader::ReadPixMapEtc( Bitmap &rBitmap, bool bBaseAddr, bool bColo
                             nRed = static_cast<sal_uInt8>( nD >> 7 );
                             nGreen = static_cast<sal_uInt8>( nD >> 2 );
                             nBlue = static_cast<sal_uInt8>( nD << 3 );
-                            pAcc->SetPixelOnData(pScanline, nx++, BitmapColor(nRed, nGreen, nBlue));
+                            pBitmap->SetPixel(ny, nx++, Color(nRed, nGreen, nBlue));
                         }
                     }
                     else
                     {
                         if (pPict->remainingSize() < sizeof(sal_uInt16))
-                            BITMAPERROR;
+                            return 0xffffffff;
                         nCount=(1-sal_Int16(static_cast<sal_uInt16>(nFlagCounterByte)|0xff00));
                         if ( nCount + nx > nWidth )
                             nCount = nWidth - nx;
@@ -1026,7 +1000,7 @@ sal_uLong PictReader::ReadPixMapEtc( Bitmap &rBitmap, bool bBaseAddr, bool bColo
                         nBlue = static_cast<sal_uInt8>( nD << 3 );
                         for (size_t i = 0; i < nCount; ++i)
                         {
-                            pAcc->SetPixelOnData(pScanline, nx++, BitmapColor(nRed, nGreen, nBlue));
+                            pBitmap->SetPixel(ny, nx++, Color(nRed, nGreen, nBlue));
                         }
                     }
                 }
@@ -1040,7 +1014,6 @@ sal_uLong PictReader::ReadPixMapEtc( Bitmap &rBitmap, bool bBaseAddr, bool bColo
         sal_uInt16          nByteCount;
         size_t              nCount;
         sal_uLong           nSrcBitsPos;
-        BitmapColor         aBitmapColor;
         if ( nRowBytes != 4*nWidth )
             return 0xffffffff;
 
@@ -1054,17 +1027,15 @@ sal_uLong PictReader::ReadPixMapEtc( Bitmap &rBitmap, bool bBaseAddr, bool bColo
             if (nWidth > nMaxCols)
                 return 0xffffffff;
 
-            if ( ( pAcc = initBitmap(aBitmap, nWidth, nHeight, nDstBitCount, aPalette) ) == nullptr )
-                return 0xffffffff;
+            pBitmap.reset(new vcl::bitmap::RawBitmap( Size(nWidth, nHeight) ));
 
             for (sal_uInt16 ny = 0; ny < nHeight; ++ny)
             {
-                Scanline pScanline = pAcc->GetScanline(ny);
                 for (sal_uInt16 nx = 0; nx < nWidth; ++nx)
                 {
                     sal_uInt8 nDummy;
                     pPict->ReadUChar( nDummy ).ReadUChar( nRed ).ReadUChar( nGreen ).ReadUChar( nBlue );
-                    pAcc->SetPixelOnData(pScanline, nx, BitmapColor(nRed, nGreen, nBlue));
+                    pBitmap->SetPixel(ny, nx, Color(nRed, nGreen, nBlue));
                 }
                 nDataSize += static_cast<sal_uLong>(nWidth) * 4;
             }
@@ -1079,16 +1050,14 @@ sal_uLong PictReader::ReadPixMapEtc( Bitmap &rBitmap, bool bBaseAddr, bool bColo
             if (nWidth > nMaxCols)
                 return 0xffffffff;
 
-            if ( ( pAcc = initBitmap(aBitmap, nWidth, nHeight, nDstBitCount, aPalette) ) == nullptr )
-                return 0xffffffff;
+            pBitmap.reset(new vcl::bitmap::RawBitmap( Size(nWidth, nHeight) ));
 
             for (sal_uInt16 ny = 0; ny < nHeight; ++ny)
             {
-                Scanline pScanline = pAcc->GetScanline(ny);
                 for (sal_uInt16 nx = 0; nx < nWidth; ++nx)
                 {
                     pPict->ReadUChar( nRed ).ReadUChar( nGreen ).ReadUChar( nBlue );
-                    pAcc->SetPixelOnData(pScanline, nx, BitmapColor(nRed, nGreen, nBlue));
+                    pBitmap->SetPixel(ny, nx, Color(nRed, nGreen, nBlue));
                 }
                 nDataSize += static_cast<sal_uLong>(nWidth) * 3;
             }
@@ -1103,8 +1072,7 @@ sal_uLong PictReader::ReadPixMapEtc( Bitmap &rBitmap, bool bBaseAddr, bool bColo
                 if (nHeight > pPict->remainingSize() / nByteCountSize)
                     return 0xffffffff;
 
-                if ( ( pAcc = initBitmap(aBitmap, nWidth, nHeight, nDstBitCount, aPalette) ) == nullptr )
-                    return 0xffffffff;
+                pBitmap.reset(new vcl::bitmap::RawBitmap( Size(nWidth, nHeight) ));
 
                 size_t nByteWidth = static_cast<size_t>(nWidth) * nCmpCount;
                 std::vector<sal_uInt8> aScanline(nByteWidth);
@@ -1132,7 +1100,7 @@ sal_uLong PictReader::ReadPixMapEtc( Bitmap &rBitmap, bool bBaseAddr, bool bColo
                             if ((i + nCount) > nByteWidth)
                                 nCount = nByteWidth - i;
                             if (pPict->remainingSize() < nCount)
-                                BITMAPERROR;
+                                return 0xffffffff;
                             while( nCount-- )
                             {
                                 pPict->ReadUChar( nDat );
@@ -1142,7 +1110,7 @@ sal_uLong PictReader::ReadPixMapEtc( Bitmap &rBitmap, bool bBaseAddr, bool bColo
                         else
                         {
                             if (pPict->remainingSize() < 1)
-                                BITMAPERROR;
+                                return 0xffffffff;
                             nCount = ( 1 - sal_Int16( static_cast<sal_uInt16>(nFlagCounterByte) | 0xff00 ) );
                             if (( i + nCount) > nByteWidth)
                                 nCount = nByteWidth - i;
@@ -1154,9 +1122,8 @@ sal_uLong PictReader::ReadPixMapEtc( Bitmap &rBitmap, bool bBaseAddr, bool bColo
                     sal_uInt8* pTmp = aScanline.data();
                     if ( nCmpCount == 4 )
                         pTmp += nWidth;
-                    Scanline pScanline = pAcc->GetScanline(ny);
                     for (sal_uInt16 nx = 0; nx < nWidth; pTmp++)
-                        pAcc->SetPixelOnData(pScanline, nx++, BitmapColor(*pTmp, pTmp[ nWidth ], pTmp[ 2 * nWidth ]));
+                        pBitmap->SetPixel(ny, nx++, Color(*pTmp, pTmp[ nWidth ], pTmp[ 2 * nWidth ]));
                     nDataSize += static_cast<sal_uLong>(nByteCount);
                     pPict->Seek( nSrcBitsPos + static_cast<sal_uLong>(nByteCount) );
                 }
@@ -1165,9 +1132,7 @@ sal_uLong PictReader::ReadPixMapEtc( Bitmap &rBitmap, bool bBaseAddr, bool bColo
     }
     else
         return 0xffffffff;
-    if (pAcc)
-        Bitmap::ReleaseAccess(pAcc);
-    rBitmap = aBitmap;
+    rBitmap = vcl::bitmap::CreateFromData(std::move(*pBitmap));
     return nDataSize;
 }
 
@@ -1820,19 +1785,19 @@ sal_uLong PictReader::ReadData(sal_uInt16 nOpcode)
         break;
 
     case 0x0090: { // BitsRect
-        Bitmap aBmp;
+        BitmapEx aBmp;
         tools::Rectangle aSrcRect, aDestRect;
         nDataSize=ReadPixMapEtc(aBmp, false, true, &aSrcRect, &aDestRect, true, false);
         DrawingMethod( PictDrawingMethod::PAINT );
-        pVirDev->DrawBitmap(aDestRect.TopLeft(),aDestRect.GetSize(),aBmp);
+        pVirDev->DrawBitmapEx(aDestRect.TopLeft(),aDestRect.GetSize(),aBmp);
         break;
     }
     case 0x0091: { // BitsRgn
-        Bitmap aBmp;
+        BitmapEx aBmp;
         tools::Rectangle aSrcRect, aDestRect;
         nDataSize=ReadPixMapEtc(aBmp, false, true, &aSrcRect, &aDestRect, true, true);
         DrawingMethod( PictDrawingMethod::PAINT );
-        pVirDev->DrawBitmap(aDestRect.TopLeft(),aDestRect.GetSize(),aBmp);
+        pVirDev->DrawBitmapEx(aDestRect.TopLeft(),aDestRect.GetSize(),aBmp);
         break;
     }
     case 0x0092:   // Reserved (n Bytes)
@@ -1845,35 +1810,35 @@ sal_uLong PictReader::ReadData(sal_uInt16 nOpcode)
         break;
 
     case 0x0098: { // PackBitsRect
-        Bitmap aBmp;
+        BitmapEx aBmp;
         tools::Rectangle aSrcRect, aDestRect;
         nDataSize=ReadPixMapEtc(aBmp, false, true, &aSrcRect, &aDestRect, true, false);
         DrawingMethod( PictDrawingMethod::PAINT );
-        pVirDev->DrawBitmap(aDestRect.TopLeft(),aDestRect.GetSize(),aBmp);
+        pVirDev->DrawBitmapEx(aDestRect.TopLeft(),aDestRect.GetSize(),aBmp);
         break;
     }
     case 0x0099: { // PackBitsRgn
-        Bitmap aBmp;
+        BitmapEx aBmp;
         tools::Rectangle aSrcRect, aDestRect;
         nDataSize=ReadPixMapEtc(aBmp, false, true, &aSrcRect, &aDestRect, true, true);
         DrawingMethod( PictDrawingMethod::PAINT );
-        pVirDev->DrawBitmap(aDestRect.TopLeft(),aDestRect.GetSize(),aBmp);
+        pVirDev->DrawBitmapEx(aDestRect.TopLeft(),aDestRect.GetSize(),aBmp);
         break;
     }
     case 0x009a: { // DirectBitsRect
-        Bitmap aBmp;
+        BitmapEx aBmp;
         tools::Rectangle aSrcRect, aDestRect;
         nDataSize=ReadPixMapEtc(aBmp, true, false, &aSrcRect, &aDestRect, true, false);
         DrawingMethod( PictDrawingMethod::PAINT );
-        pVirDev->DrawBitmap(aDestRect.TopLeft(),aDestRect.GetSize(),aBmp);
+        pVirDev->DrawBitmapEx(aDestRect.TopLeft(),aDestRect.GetSize(),aBmp);
         break;
     }
     case 0x009b: { // DirectBitsRgn
-        Bitmap aBmp;
+        BitmapEx aBmp;
         tools::Rectangle aSrcRect, aDestRect;
         nDataSize=ReadPixMapEtc(aBmp, true, false, &aSrcRect, &aDestRect, true, true);
         DrawingMethod( PictDrawingMethod::PAINT );
-        pVirDev->DrawBitmap(aDestRect.TopLeft(),aDestRect.GetSize(),aBmp);
+        pVirDev->DrawBitmapEx(aDestRect.TopLeft(),aDestRect.GetSize(),aBmp);
         break;
     }
     case 0x009c:   // Reserved (n Bytes)


More information about the Libreoffice-commits mailing list