desktop/source/lib/init.cxx       |   27 ++-------------------------
 include/vcl/BitmapTools.hxx       |    2 ++
 vcl/source/bitmap/BitmapTools.cxx |   30 ++++++++++++++++++++++++++++++
 3 files changed, 34 insertions(+), 25 deletions(-)

New commits:
commit df19cc6cddc794eb6e289831707e690bd01eb227
Author:     Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk>
AuthorDate: Wed Aug 7 13:31:50 2024 +0200
Commit:     Tomaž Vajngerl <qui...@gmail.com>
CommitDate: Thu Aug 15 08:09:55 2024 +0200

    vcl: add "fillWithData" function to BitmapTools - used in lok
    
    Change-Id: Ia143a39d2285bbdebf7fcfe709b0c6418d35585c
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/171589
    Reviewed-by: Tomaž Vajngerl <qui...@gmail.com>
    Tested-by: Jenkins

diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx
index 71f27c395d33..1857275268b1 100644
--- a/desktop/source/lib/init.cxx
+++ b/desktop/source/lib/init.cxx
@@ -172,7 +172,7 @@
 #include <vcl/ITiledRenderable.hxx>
 #include <vcl/dialoghelper.hxx>
 #ifdef _WIN32
-#include <vcl/BitmapReadAccess.hxx>
+#include <vcl/BitmapTools.hxx>
 #endif
 #include <unicode/uchar.h>
 #include <unotools/securityoptions.hxx>
@@ -4391,30 +4391,7 @@ static void doc_paintTile(LibreOfficeKitDocument* pThis,
     // pBuffer was not used there
     pDevice->EnableMapMode(false);
     BitmapEx aBmpEx = pDevice->GetBitmapEx({ 0, 0 }, { nCanvasWidth, 
nCanvasHeight });
-    Bitmap aBmp = aBmpEx.GetBitmap();
-    AlphaMask aAlpha = aBmpEx.GetAlphaMask();
-    BitmapScopedReadAccess sraBmp(aBmp);
-    BitmapScopedReadAccess sraAlpha(aAlpha);
-
-    assert(sraBmp->Height() == nCanvasHeight);
-    assert(sraBmp->Width() == nCanvasWidth);
-    assert(!sraAlpha || sraBmp->Height() == sraAlpha->Height());
-    assert(!sraAlpha || sraBmp->Width() == sraAlpha->Width());
-    auto p = pBuffer;
-    for (tools::Long y = 0; y < sraBmp->Height(); ++y)
-    {
-        Scanline dataBmp = sraBmp->GetScanline(y);
-        Scanline dataAlpha = sraAlpha ? sraAlpha->GetScanline(y) : nullptr;
-        for (tools::Long x = 0; x < sraBmp->Width(); ++x)
-        {
-            BitmapColor color = sraBmp->GetPixelFromData(dataBmp, x);
-            sal_uInt8 alpha = dataAlpha ? 
sraAlpha->GetPixelFromData(dataAlpha, x).GetBlue() : 255;
-            *p++ = color.GetBlue();
-            *p++ = color.GetGreen();
-            *p++ = color.GetRed();
-            *p++ = alpha;
-        }
-    }
+    vcl::bitmap::fillWithData(pBuffer, aBmpEx);
 #endif
 #endif
 
diff --git a/include/vcl/BitmapTools.hxx b/include/vcl/BitmapTools.hxx
index 83c003296d61..5e5a48ad6fae 100644
--- a/include/vcl/BitmapTools.hxx
+++ b/include/vcl/BitmapTools.hxx
@@ -55,6 +55,8 @@ BitmapEx VCL_DLLPUBLIC CreateFromData(sal_uInt8 const *pData,
                                       sal_Int8 nBitsPerPixel,
                                       bool bReversColors = false, bool 
bReverseAlpha = false);
 
+void VCL_DLLPUBLIC fillWithData(sal_uInt8* pData, BitmapEx const& rBitmapEx);
+
 BitmapEx VCL_DLLPUBLIC CreateFromData( RawBitmap && data );
 
 #if ENABLE_CAIRO_CANVAS
diff --git a/vcl/source/bitmap/BitmapTools.cxx 
b/vcl/source/bitmap/BitmapTools.cxx
index 060f391f3e18..3fa06d54019a 100644
--- a/vcl/source/bitmap/BitmapTools.cxx
+++ b/vcl/source/bitmap/BitmapTools.cxx
@@ -287,6 +287,36 @@ BitmapEx CreateFromData( RawBitmap&& rawBitmap )
         return BitmapEx(aBmp);
 }
 
+void fillWithData(sal_uInt8* pData, BitmapEx const& rBitmapEx)
+{
+    Bitmap aBitmap = rBitmapEx.GetBitmap();
+    AlphaMask aAlphaMask = rBitmapEx.GetAlphaMask();
+    BitmapScopedReadAccess aReadAccessBitmap(aBitmap);
+    BitmapScopedReadAccess aReadAccessAlpha(aAlphaMask);
+
+    assert(!aReadAccessAlpha || aReadAccessBitmap->Height() == 
aReadAccessAlpha->Height());
+    assert(!aReadAccessAlpha || aReadAccessBitmap->Width() == 
aReadAccessAlpha->Width());
+
+    sal_uInt8* p = pData;
+
+    for (tools::Long y = 0; y < aReadAccessBitmap->Height(); ++y)
+    {
+        Scanline dataBitmap = aReadAccessBitmap->GetScanline(y);
+        Scanline dataAlpha = aReadAccessAlpha ? 
aReadAccessAlpha->GetScanline(y) : nullptr;
+
+        for (tools::Long x = 0; x < aReadAccessBitmap->Width(); ++x)
+        {
+            BitmapColor aColor = 
aReadAccessBitmap->GetPixelFromData(dataBitmap, x);
+            sal_uInt8 aAlpha = dataAlpha ? 
aReadAccessAlpha->GetPixelFromData(dataAlpha, x).GetBlue() : 255;
+            *p++ = aColor.GetBlue();
+            *p++ = aColor.GetGreen();
+            *p++ = aColor.GetRed();
+            *p++ = aAlpha;
+        }
+    }
+}
+
+
 #if ENABLE_CAIRO_CANVAS
 BitmapEx* CreateFromCairoSurface(Size aSize, cairo_surface_t * pSurface)
 {

Reply via email to