canvas/source/cairo/cairo_canvashelper.cxx                   |   19 
 canvas/source/directx/dx_vcltools.cxx                        |    6 
 cppcanvas/source/mtfrenderer/bitmapaction.cxx                |   22 -
 cppcanvas/source/mtfrenderer/bitmapaction.hxx                |    4 
 cppcanvas/source/mtfrenderer/implrenderer.cxx                |   24 -
 cppcanvas/source/mtfrenderer/transparencygroupaction.cxx     |    4 
 cppcanvas/source/wrapper/vclfactory.cxx                      |    4 
 drawinglayer/source/drawinglayeruno/xprimitive2drenderer.cxx |   10 
 include/cppcanvas/vclfactory.hxx                             |    4 
 include/vcl/BitmapTools.hxx                                  |    1 
 include/vcl/canvastools.hxx                                  |    8 
 sd/source/ui/presenter/PresenterHelper.cxx                   |    2 
 sd/source/ui/presenter/PresenterPreviewCache.cxx             |    2 
 sd/source/ui/presenter/SlideRenderer.cxx                     |    2 
 sd/source/ui/slideshow/slideshowimpl.cxx                     |   10 
 slideshow/source/engine/shapes/viewmediashape.cxx            |    4 
 vcl/source/bitmap/BitmapTools.cxx                            |  221 ++++++++++-
 vcl/source/helper/canvastools.cxx                            |   12 
 18 files changed, 279 insertions(+), 80 deletions(-)

New commits:
commit 09298d001e98ed494ecb1df5cb563b081da050e8
Author:     Noel Grandin <noelgran...@gmail.com>
AuthorDate: Tue Jul 29 19:59:53 2025 +0200
Commit:     Noel Grandin <noelgran...@gmail.com>
CommitDate: Thu Aug 7 13:09:57 2025 +0200

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

diff --git a/canvas/source/cairo/cairo_canvashelper.cxx 
b/canvas/source/cairo/cairo_canvashelper.cxx
index 701ad1e47859..0170499c6abb 100644
--- a/canvas/source/cairo/cairo_canvashelper.cxx
+++ b/canvas/source/cairo/cairo_canvashelper.cxx
@@ -303,20 +303,20 @@ constexpr OUStringLiteral 
PARAMETRICPOLYPOLYGON_IMPLEMENTATION_NAME = u"Canvas::
         return SurfaceSharedPtr();
     }
 
-    static ::BitmapEx bitmapExFromXBitmap( const uno::Reference< 
rendering::XBitmap >& xBitmap )
+    static ::Bitmap bitmapFromXBitmap( const uno::Reference< 
rendering::XBitmap >& xBitmap )
     {
         // TODO(F1): Add support for floating point bitmap formats
         uno::Reference<rendering::XIntegerReadOnlyBitmap> xIntBmp(xBitmap,
                                                                   
uno::UNO_QUERY_THROW);
-        ::BitmapEx aBmpEx = vcl::unotools::bitmapExFromXBitmap(xIntBmp);
-        if( !aBmpEx.IsEmpty() )
-            return aBmpEx;
+        ::Bitmap aBmp = vcl::unotools::bitmapFromXBitmap(xIntBmp);
+        if( !aBmp.IsEmpty() )
+            return aBmp;
 
         // TODO(F1): extract pixel from XBitmap interface
         ENSURE_OR_THROW( false,
-                         "bitmapExFromXBitmap(): could not extract BitmapEx" );
+                         "bitmapFromXBitmap(): could not extract BitmapEx" );
 
-        return ::BitmapEx();
+        return ::Bitmap();
     }
 
     /** surfaceFromXBitmap Create a surface from XBitmap
@@ -338,13 +338,12 @@ constexpr OUStringLiteral 
PARAMETRICPOLYPOLYGON_IMPLEMENTATION_NAME = u"Canvas::
             data = nullptr;
         else
         {
-            ::BitmapEx aBmpEx = bitmapExFromXBitmap(xBitmap);
-            ::Bitmap aBitmap = aBmpEx.GetBitmap();
+            ::Bitmap aBitmap = bitmapFromXBitmap(xBitmap);
 
             // there's no pixmap for alpha bitmap. we might still
             // use rgb pixmap and only access alpha pixels the
             // slow way. now we just speedup rgb bitmaps
-            if( !aBmpEx.IsAlpha() )
+            if( !aBitmap.HasAlpha() )
             {
                 pSurface = rSurfaceProvider->createSurface( aBitmap );
                 data = nullptr;
@@ -355,7 +354,7 @@ constexpr OUStringLiteral 
PARAMETRICPOLYPOLYGON_IMPLEMENTATION_NAME = u"Canvas::
             {
                 tools::Long nWidth;
                 tools::Long nHeight;
-                vcl::bitmap::CanvasCairoExtractBitmapData(aBmpEx, aBitmap, 
data, bHasAlpha, nWidth, nHeight);
+                vcl::bitmap::CanvasCairoExtractBitmapData(aBitmap, data, 
bHasAlpha, nWidth, nHeight);
 
                 pSurface = rSurfaceProvider->getOutputDevice()->CreateSurface(
                     CairoSurfaceSharedPtr(
diff --git a/canvas/source/directx/dx_vcltools.cxx 
b/canvas/source/directx/dx_vcltools.cxx
index 8e1201ae692f..4b11ffaea6d5 100644
--- a/canvas/source/directx/dx_vcltools.cxx
+++ b/canvas/source/directx/dx_vcltools.cxx
@@ -295,11 +295,11 @@ namespace dxcanvas::tools
             if( !xIntBmp.is() )
                 return false;
 
-            ::BitmapEx aBmpEx = vcl::unotools::bitmapExFromXBitmap( xIntBmp );
-            if( aBmpEx.IsEmpty() )
+            ::Bitmap aBmp = vcl::unotools::bitmapFromXBitmap( xIntBmp );
+            if( aBmp.IsEmpty() )
                 return false;
 
-            return drawVCLBitmapEx( rGraphics, aBmpEx );
+            return drawVCLBitmapEx( rGraphics, BitmapEx(aBmp) );
         }
 }
 
diff --git a/cppcanvas/source/mtfrenderer/bitmapaction.cxx 
b/cppcanvas/source/mtfrenderer/bitmapaction.cxx
index 24e1f46faeb8..e205dd35fa10 100644
--- a/cppcanvas/source/mtfrenderer/bitmapaction.cxx
+++ b/cppcanvas/source/mtfrenderer/bitmapaction.cxx
@@ -46,11 +46,11 @@ namespace cppcanvas::internal
             class BitmapAction : public CachedPrimitiveBase
             {
             public:
-                BitmapAction( const ::BitmapEx&,
+                BitmapAction( const ::Bitmap&,
                               const ::basegfx::B2DPoint& rDstPoint,
                               const CanvasSharedPtr&,
                               const OutDevState& );
-                BitmapAction( const ::BitmapEx&,
+                BitmapAction( const ::Bitmap&,
                               const ::basegfx::B2DPoint&  rDstPoint,
                               const ::basegfx::B2DVector& rDstSize,
                               const CanvasSharedPtr&,
@@ -76,12 +76,12 @@ namespace cppcanvas::internal
             };
 
 
-            BitmapAction::BitmapAction( const ::BitmapEx&          rBmpEx,
+            BitmapAction::BitmapAction( const ::Bitmap&          rBmpEx,
                                         const ::basegfx::B2DPoint& rDstPoint,
                                         const CanvasSharedPtr&     rCanvas,
                                         const OutDevState&         rState ) :
                 CachedPrimitiveBase( rCanvas, true ),
-                mxBitmap( vcl::unotools::xBitmapFromBitmapEx( rBmpEx ) ),
+                mxBitmap( vcl::unotools::xBitmapFromBitmap( rBmpEx ) ),
                 mpCanvas( rCanvas )
             {
                 tools::initRenderState(maState,rState);
@@ -101,13 +101,13 @@ namespace cppcanvas::internal
                                    nullptr );
             }
 
-            BitmapAction::BitmapAction( const ::BitmapEx&           rBmpEx,
+            BitmapAction::BitmapAction( const ::Bitmap&           rBmp,
                                         const ::basegfx::B2DPoint&  rDstPoint,
                                         const ::basegfx::B2DVector& rDstSize,
                                         const CanvasSharedPtr&      rCanvas,
                                         const OutDevState&          rState     
 ) :
                 CachedPrimitiveBase( rCanvas, true ),
-                mxBitmap( vcl::unotools::xBitmapFromBitmapEx( rBmpEx ) ),
+                mxBitmap( vcl::unotools::xBitmapFromBitmap( rBmp ) ),
                 mpCanvas( rCanvas )
             {
                 tools::initRenderState(maState,rState);
@@ -115,7 +115,7 @@ namespace cppcanvas::internal
                 // Setup transformation such that the next render call is
                 // moved rPoint away, and scaled according to the ratio
                 // given by src and dst size.
-                const ::Size aBmpSize( rBmpEx.GetSizePixel() );
+                const ::Size aBmpSize( rBmp.GetSizePixel() );
 
                 const ::basegfx::B2DVector aScale( rDstSize.getX() / 
aBmpSize.Width(),
                                                    rDstSize.getY() / 
aBmpSize.Height() );
@@ -192,21 +192,21 @@ namespace cppcanvas::internal
             }
         }
 
-        std::shared_ptr<Action> BitmapActionFactory::createBitmapAction( const 
::BitmapEx&          rBmpEx,
+        std::shared_ptr<Action> BitmapActionFactory::createBitmapAction( const 
::Bitmap&          rBmp,
                                                                  const 
::basegfx::B2DPoint& rDstPoint,
                                                                  const 
CanvasSharedPtr&     rCanvas,
                                                                  const 
OutDevState&         rState )
         {
-            return std::make_shared<BitmapAction>(rBmpEx, rDstPoint, rCanvas, 
rState );
+            return std::make_shared<BitmapAction>(rBmp, rDstPoint, rCanvas, 
rState );
         }
 
-        std::shared_ptr<Action> BitmapActionFactory::createBitmapAction( const 
::BitmapEx&           rBmpEx,
+        std::shared_ptr<Action> BitmapActionFactory::createBitmapAction( const 
::Bitmap&           rBmp,
                                                                  const 
::basegfx::B2DPoint&  rDstPoint,
                                                                  const 
::basegfx::B2DVector& rDstSize,
                                                                  const 
CanvasSharedPtr&      rCanvas,
                                                                  const 
OutDevState&          rState )
         {
-            return std::make_shared<BitmapAction>(rBmpEx,
+            return std::make_shared<BitmapAction>(rBmp,
                                                   rDstPoint,
                                                   rDstSize,
                                                   rCanvas,
diff --git a/cppcanvas/source/mtfrenderer/bitmapaction.hxx 
b/cppcanvas/source/mtfrenderer/bitmapaction.hxx
index 59bf841dabc0..d88686f59d09 100644
--- a/cppcanvas/source/mtfrenderer/bitmapaction.hxx
+++ b/cppcanvas/source/mtfrenderer/bitmapaction.hxx
@@ -44,13 +44,13 @@ namespace cppcanvas::internal
         namespace BitmapActionFactory
         {
             /// Unscaled bitmap action, only references destination point
-            std::shared_ptr<Action> createBitmapAction( const ::BitmapEx&,
+            std::shared_ptr<Action> createBitmapAction( const ::Bitmap&,
                                                        const 
::basegfx::B2DPoint& rDstPoint,
                                                        const CanvasSharedPtr&,
                                                        const OutDevState& );
 
             /// Scaled bitmap action, dest point and dest size
-            std::shared_ptr<Action> createBitmapAction( const ::BitmapEx&,
+            std::shared_ptr<Action> createBitmapAction( const ::Bitmap&,
                                                        const 
::basegfx::B2DPoint&  rDstPoint,
                                                        const 
::basegfx::B2DVector& rDstSize,
                                                        const CanvasSharedPtr&,
diff --git a/cppcanvas/source/mtfrenderer/implrenderer.cxx 
b/cppcanvas/source/mtfrenderer/implrenderer.cxx
index 56cc42a9a432..bdedd4633a15 100644
--- a/cppcanvas/source/mtfrenderer/implrenderer.cxx
+++ b/cppcanvas/source/mtfrenderer/implrenderer.cxx
@@ -1683,8 +1683,8 @@ namespace cppcanvas::internal
                                     Graphic aGraphic;
                                     aFill.getGraphic( aGraphic );
 
-                                    BitmapEx     aBmpEx( 
aGraphic.GetBitmapEx() );
-                                    const ::Size aBmpSize( 
aBmpEx.GetSizePixel() );
+                                    Bitmap aBmp( aGraphic.GetBitmapEx() );
+                                    const ::Size aBmpSize( aBmp.GetSizePixel() 
);
 
                                     ::SvtGraphicFill::Transform aTransform;
                                     aFill.getTransform( aTransform );
@@ -1723,7 +1723,7 @@ namespace cppcanvas::internal
                                         aMatrix );
 
                                     aTexture.Alpha = 1.0 - 
aFill.getTransparency();
-                                    aTexture.Bitmap = 
vcl::unotools::xBitmapFromBitmapEx( aBmpEx );
+                                    aTexture.Bitmap = 
vcl::unotools::xBitmapFromBitmap( aBmp );
                                     if( aFill.isTiling() )
                                     {
                                         aTexture.RepeatModeX = 
rendering::TexturingMode::REPEAT;
@@ -2111,7 +2111,7 @@ namespace cppcanvas::internal
 
                         std::shared_ptr<Action> pBmpAction(
                                 
internal::BitmapActionFactory::createBitmapAction(
-                                    BitmapEx(pAct->GetBitmap()),
+                                    pAct->GetBitmap(),
                                     rStates.getState().mapModeTransform *
                                     vcl::unotools::b2DPointFromPoint( 
pAct->GetPoint() ),
                                     rCanvas,
@@ -2134,7 +2134,7 @@ namespace cppcanvas::internal
 
                         std::shared_ptr<Action> pBmpAction(
                                 
internal::BitmapActionFactory::createBitmapAction(
-                                    BitmapEx(pAct->GetBitmap()),
+                                    pAct->GetBitmap(),
                                     rStates.getState().mapModeTransform * 
vcl::unotools::b2DPointFromPoint( pAct->GetPoint() ),
                                     rStates.getState().mapModeTransform * 
vcl::unotools::b2DVectorFromSize( pAct->GetSize() ),
                                     rCanvas,
@@ -2164,7 +2164,7 @@ namespace cppcanvas::internal
 
                         std::shared_ptr<Action> pBmpAction(
                                 
internal::BitmapActionFactory::createBitmapAction(
-                                    BitmapEx(aBmp),
+                                    aBmp,
                                     rStates.getState().mapModeTransform *
                                     vcl::unotools::b2DPointFromPoint( 
pAct->GetDestPoint() ),
                                     rStates.getState().mapModeTransform *
@@ -2189,7 +2189,7 @@ namespace cppcanvas::internal
 
                         std::shared_ptr<Action> pBmpAction(
                                 
internal::BitmapActionFactory::createBitmapAction(
-                                    pAct->GetBitmapEx(),
+                                    Bitmap(pAct->GetBitmapEx()),
                                     rStates.getState().mapModeTransform *
                                     vcl::unotools::b2DPointFromPoint( 
pAct->GetPoint() ),
                                     rCanvas,
@@ -2212,7 +2212,7 @@ namespace cppcanvas::internal
 
                         std::shared_ptr<Action> pBmpAction(
                                 
internal::BitmapActionFactory::createBitmapAction(
-                                    pAct->GetBitmapEx(),
+                                    Bitmap(pAct->GetBitmapEx()),
                                     rStates.getState().mapModeTransform *
                                     vcl::unotools::b2DPointFromPoint( 
pAct->GetPoint() ),
                                     rStates.getState().mapModeTransform *
@@ -2237,7 +2237,7 @@ namespace cppcanvas::internal
 
                         // crop bitmap to given source rectangle (no
                         // need to copy and convert the whole bitmap)
-                        BitmapEx aBmp( pAct->GetBitmapEx() );
+                        Bitmap aBmp( pAct->GetBitmapEx() );
                         const ::tools::Rectangle aCropRect( 
pAct->GetSrcPoint(),
                                                    pAct->GetSrcSize() );
                         aBmp.Crop( aCropRect );
@@ -2270,7 +2270,7 @@ namespace cppcanvas::internal
                         // create masked BitmapEx right here, as the
                         // canvas does not provide equivalent
                         // functionality
-                        BitmapEx aBmp( createMaskBmpEx( pAct->GetBitmap(),
+                        Bitmap aBmp( createMaskBmpEx( pAct->GetBitmap(),
                                                         pAct->GetColor() ));
 
                         std::shared_ptr<Action> pBmpAction(
@@ -2299,7 +2299,7 @@ namespace cppcanvas::internal
                         // create masked BitmapEx right here, as the
                         // canvas does not provide equivalent
                         // functionality
-                        BitmapEx aBmp( createMaskBmpEx( pAct->GetBitmap(),
+                        Bitmap aBmp( createMaskBmpEx( pAct->GetBitmap(),
                                                         pAct->GetColor() ));
 
                         std::shared_ptr<Action> pBmpAction(
@@ -2330,7 +2330,7 @@ namespace cppcanvas::internal
                         // create masked BitmapEx right here, as the
                         // canvas does not provide equivalent
                         // functionality
-                        BitmapEx aBmp( createMaskBmpEx( pAct->GetBitmap(),
+                        Bitmap aBmp( createMaskBmpEx( pAct->GetBitmap(),
                                                         pAct->GetColor() ));
 
                         // crop bitmap to given source rectangle (no
diff --git a/cppcanvas/source/mtfrenderer/transparencygroupaction.cxx 
b/cppcanvas/source/mtfrenderer/transparencygroupaction.cxx
index dcf9c2aa9a68..9eea8f610a29 100644
--- a/cppcanvas/source/mtfrenderer/transparencygroupaction.cxx
+++ b/cppcanvas/source/mtfrenderer/transparencygroupaction.cxx
@@ -383,9 +383,9 @@ namespace cppcanvas::internal
                     // update buffered bitmap and transformation
                     BitmapSharedPtr aBmp( VCLFactory::createBitmap(
                                               mpCanvas,
-                                              BitmapEx(aVDev->GetBitmap(
+                                              aVDev->GetBitmap(
                                                   aBitmapPoint,
-                                                  aBitmapSizePixel ) ) ));
+                                                  aBitmapSizePixel ) ) );
                     mxBufferBitmap = aBmp->getUNOBitmap();
                     maLastTransformation = aTotalTransform;
                     maLastSubset = rSubset;
diff --git a/cppcanvas/source/wrapper/vclfactory.cxx 
b/cppcanvas/source/wrapper/vclfactory.cxx
index 825368859d1e..1c0137f82ccc 100644
--- a/cppcanvas/source/wrapper/vclfactory.cxx
+++ b/cppcanvas/source/wrapper/vclfactory.cxx
@@ -54,7 +54,7 @@ namespace cppcanvas
     }
 
     BitmapSharedPtr VCLFactory::createBitmap( const CanvasSharedPtr&    
rCanvas,
-                                              const ::BitmapEx&         rBmpEx 
)
+                                              const ::Bitmap&         rBmp )
     {
         OSL_ENSURE( rCanvas && rCanvas->getUNOCanvas().is(),
                     "VCLFactory::createBitmap(): Invalid canvas" );
@@ -67,7 +67,7 @@ namespace cppcanvas
             return BitmapSharedPtr();
 
         return std::make_shared<internal::ImplBitmap>( rCanvas,
-                                                          
vcl::unotools::xBitmapFromBitmapEx(rBmpEx) );
+                                                          
vcl::unotools::xBitmapFromBitmap(rBmp) );
     }
 
     RendererSharedPtr VCLFactory::createRenderer( const CanvasSharedPtr&       
 rCanvas,
diff --git a/drawinglayer/source/drawinglayeruno/xprimitive2drenderer.cxx 
b/drawinglayer/source/drawinglayeruno/xprimitive2drenderer.cxx
index 0fea457deab3..bcb30cfcef90 100644
--- a/drawinglayer/source/drawinglayeruno/xprimitive2drenderer.cxx
+++ b/drawinglayer/source/drawinglayeruno/xprimitive2drenderer.cxx
@@ -143,7 +143,7 @@ namespace drawinglayer::unorenderer
                             aPrimitive2DSequence));
                     primitive2d::Primitive2DContainer xEmbedSeq { xEmbedRef };
 
-                    BitmapEx aBitmapEx(
+                    Bitmap aBitmap(
                         convertToBitmapEx(
                             std::move(xEmbedSeq),
                             aViewInformation2D,
@@ -151,11 +151,11 @@ namespace drawinglayer::unorenderer
                             nDiscreteHeight,
                             MaximumQuadraticPixels));
 
-                    if(!aBitmapEx.IsEmpty())
+                    if(!aBitmap.IsEmpty())
                     {
-                        aBitmapEx.SetPrefMapMode(MapMode(MapUnit::Map100thMM));
-                        
aBitmapEx.SetPrefSize(Size(basegfx::fround<tools::Long>(fWidth), 
basegfx::fround<tools::Long>(fHeight)));
-                        XBitmap = 
vcl::unotools::xBitmapFromBitmapEx(aBitmapEx);
+                        aBitmap.SetPrefMapMode(MapMode(MapUnit::Map100thMM));
+                        
aBitmap.SetPrefSize(Size(basegfx::fround<tools::Long>(fWidth), 
basegfx::fround<tools::Long>(fHeight)));
+                        XBitmap = vcl::unotools::xBitmapFromBitmap(aBitmap);
                     }
                 }
             }
diff --git a/include/cppcanvas/vclfactory.hxx b/include/cppcanvas/vclfactory.hxx
index 3d6ab24482ee..87929a87493f 100644
--- a/include/cppcanvas/vclfactory.hxx
+++ b/include/cppcanvas/vclfactory.hxx
@@ -28,7 +28,7 @@
 #include <cppcanvas/cppcanvasdllapi.h>
 
 namespace vcl { class Window; }
-class BitmapEx;
+class Bitmap;
 
 class GDIMetaFile;
 
@@ -62,7 +62,7 @@ namespace cppcanvas
 
         /** Create a bitmap from a VCL Bitmap
          */
-        static BitmapSharedPtr   createBitmap( const CanvasSharedPtr&, const 
::BitmapEx& rBmpEx );
+        static BitmapSharedPtr   createBitmap( const CanvasSharedPtr&, const 
::Bitmap& rBmp );
 
         /** Create a renderer object from a Metafile
 
diff --git a/include/vcl/BitmapTools.hxx b/include/vcl/BitmapTools.hxx
index 0587f53196a0..675310212960 100644
--- a/include/vcl/BitmapTools.hxx
+++ b/include/vcl/BitmapTools.hxx
@@ -79,6 +79,7 @@ VCL_DLLPUBLIC css::uno::Sequence< sal_Int8 > 
GetMaskDIB(BitmapEx const & aBmpEx)
  * @param bHasAlpha will be set to true if resulting surface has alpha
  **/
 VCL_DLLPUBLIC void CanvasCairoExtractBitmapData( BitmapEx const & rBmpEx, 
Bitmap const & rBitmap, unsigned char*& data, bool& bHasAlpha, tools::Long& 
rnWidth, tools::Long& rnHeight );
+VCL_DLLPUBLIC void CanvasCairoExtractBitmapData( Bitmap const & rBitmap, 
unsigned char*& data, bool& bHasAlpha, tools::Long& rnWidth, tools::Long& 
rnHeight );
 
 VCL_DLLPUBLIC css::uno::Sequence< sal_Int8 > CanvasExtractBitmapData(BitmapEx 
const & rBitmapEx, const css::geometry::IntegerRectangle2D& rect);
 
diff --git a/include/vcl/canvastools.hxx b/include/vcl/canvastools.hxx
index 587283ebc58b..9d565634906e 100644
--- a/include/vcl/canvastools.hxx
+++ b/include/vcl/canvastools.hxx
@@ -31,7 +31,6 @@ class Point;
 class Size;
 namespace tools { class Rectangle; }
 class Bitmap;
-class BitmapEx;
 class Color;
 
 namespace basegfx
@@ -65,18 +64,11 @@ namespace vcl::unotools
         // Bitmap conversions
 
 
-        /** Create an XBitmap from VCL BitmapEx
-         */
-        css::uno::Reference< css::rendering::XBitmap >
-            VCL_DLLPUBLIC xBitmapFromBitmapEx( const ::BitmapEx& inputBitmap );
         /** Create an XBitmap from VCL Bitmap(
          */
         css::uno::Reference< css::rendering::XBitmap >
             VCL_DLLPUBLIC xBitmapFromBitmap( const ::Bitmap& inputBitmap );
 
-        /** Create a BitmapEx from an XBitmap
-         */
-        ::BitmapEx VCL_DLLPUBLIC bitmapExFromXBitmap( const 
css::uno::Reference< css::rendering::XIntegerReadOnlyBitmap >& xInputBitmap );
         /** Create a Bitmap from an XBitmap
          */
         ::Bitmap VCL_DLLPUBLIC bitmapFromXBitmap( const css::uno::Reference< 
css::rendering::XIntegerReadOnlyBitmap >& xInputBitmap );
diff --git a/sd/source/ui/presenter/PresenterHelper.cxx 
b/sd/source/ui/presenter/PresenterHelper.cxx
index 99e7d835a7b9..4c47322515ee 100644
--- a/sd/source/ui/presenter/PresenterHelper.cxx
+++ b/sd/source/ui/presenter/PresenterHelper.cxx
@@ -328,7 +328,7 @@ Reference<rendering::XBitmap> PresenterHelper::loadBitmap (
         BitmapEx aBitmapEx(bmpid);
         cppcanvas::BitmapSharedPtr xBitmap(
             cppcanvas::VCLFactory::createBitmap(pCanvas,
-                aBitmapEx));
+                Bitmap(aBitmapEx)));
         if (!xBitmap)
             return nullptr;
         return xBitmap->getUNOBitmap();
diff --git a/sd/source/ui/presenter/PresenterPreviewCache.cxx 
b/sd/source/ui/presenter/PresenterPreviewCache.cxx
index ea1d65400980..84e53d4202f4 100644
--- a/sd/source/ui/presenter/PresenterPreviewCache.cxx
+++ b/sd/source/ui/presenter/PresenterPreviewCache.cxx
@@ -137,7 +137,7 @@ Reference<rendering::XBitmap> 
PresenterPreviewCache::getSlidePreview (
     else
         return cppcanvas::VCLFactory::createBitmap(
             pCanvas,
-            aPreview)->getUNOBitmap();
+            Bitmap(aPreview))->getUNOBitmap();
 }
 
 void PresenterPreviewCache::addPreviewCreationNotifyListener (
diff --git a/sd/source/ui/presenter/SlideRenderer.cxx 
b/sd/source/ui/presenter/SlideRenderer.cxx
index 54d13cd0eb08..149a4b229794 100644
--- a/sd/source/ui/presenter/SlideRenderer.cxx
+++ b/sd/source/ui/presenter/SlideRenderer.cxx
@@ -53,7 +53,7 @@ Reference<rendering::XBitmap> 
SlideRenderer::createPreviewForCanvas (
     if (pCanvas)
         return cppcanvas::VCLFactory::createBitmap(
             pCanvas,
-            CreatePreview(rxSlide, rMaximalSize, 
nSuperSampleFactor))->getUNOBitmap();
+            Bitmap(CreatePreview(rxSlide, rMaximalSize, 
nSuperSampleFactor)))->getUNOBitmap();
     else
         return nullptr;
 }
diff --git a/sd/source/ui/slideshow/slideshowimpl.cxx 
b/sd/source/ui/slideshow/slideshowimpl.cxx
index e45eb04bbf4a..08ff8b9a6c5d 100644
--- a/sd/source/ui/slideshow/slideshowimpl.cxx
+++ b/sd/source/ui/slideshow/slideshowimpl.cxx
@@ -1258,7 +1258,7 @@ bool SlideshowImpl::startShowImpl( const Sequence< 
beans::PropertyValue >& aProp
         {
             BitmapEx waitSymbolBitmap(BMP_WAIT_ICON);
             const Reference<rendering::XBitmap> xBitmap(
-                vcl::unotools::xBitmapFromBitmapEx( waitSymbolBitmap ) );
+                vcl::unotools::xBitmapFromBitmap( Bitmap(waitSymbolBitmap) ) );
             if (xBitmap.is())
             {
                 mxShow->setProperty(
@@ -1270,7 +1270,7 @@ bool SlideshowImpl::startShowImpl( const Sequence< 
beans::PropertyValue >& aProp
 
             BitmapEx pointerSymbolBitmap(BMP_POINTER_ICON);
             const Reference<rendering::XBitmap> xPointerBitmap(
-                vcl::unotools::xBitmapFromBitmapEx( pointerSymbolBitmap ) );
+                vcl::unotools::xBitmapFromBitmap( Bitmap(pointerSymbolBitmap) 
) );
             if (xPointerBitmap.is())
             {
                 mxShow->setProperty(
@@ -1313,7 +1313,7 @@ bool SlideshowImpl::startShowImpl( const Sequence< 
beans::PropertyValue >& aProp
                 }
                 BitmapEx prevSlideBm(prevSlidePath);
                 const Reference<rendering::XBitmap> xPrevSBitmap(
-                    vcl::unotools::xBitmapFromBitmapEx(prevSlideBm));
+                    vcl::unotools::xBitmapFromBitmap(Bitmap(prevSlideBm)));
                 if (xPrevSBitmap.is())
                 {
                     
mxShow->setProperty(beans::PropertyValue(u"NavigationSlidePrev"_ustr, -1,
@@ -1322,7 +1322,7 @@ bool SlideshowImpl::startShowImpl( const Sequence< 
beans::PropertyValue >& aProp
                 }
                 BitmapEx menuSlideBm(menuPath);
                 const Reference<rendering::XBitmap> xMenuSBitmap(
-                    vcl::unotools::xBitmapFromBitmapEx(menuSlideBm));
+                    vcl::unotools::xBitmapFromBitmap(Bitmap(menuSlideBm)));
                 if (xMenuSBitmap.is())
                 {
                     
mxShow->setProperty(beans::PropertyValue(u"NavigationSlideMenu"_ustr, -1,
@@ -1331,7 +1331,7 @@ bool SlideshowImpl::startShowImpl( const Sequence< 
beans::PropertyValue >& aProp
                 }
                 BitmapEx nextSlideBm(nextSlidePath);
                 const Reference<rendering::XBitmap> xNextSBitmap(
-                    vcl::unotools::xBitmapFromBitmapEx(nextSlideBm));
+                    vcl::unotools::xBitmapFromBitmap(Bitmap(nextSlideBm)));
                 if (xNextSBitmap.is())
                 {
                     
mxShow->setProperty(beans::PropertyValue(u"NavigationSlideNext"_ustr, -1,
diff --git a/slideshow/source/engine/shapes/viewmediashape.cxx 
b/slideshow/source/engine/shapes/viewmediashape.cxx
index dbdb172fc40f..b773a5782cc4 100644
--- a/slideshow/source/engine/shapes/viewmediashape.cxx
+++ b/slideshow/source/engine/shapes/viewmediashape.cxx
@@ -175,9 +175,9 @@ namespace slideshow::internal
                 }
 
                 Graphic aGraphic(xGraphic);
-                const BitmapEx aBmp = aGraphic.GetBitmapEx();
+                const Bitmap aBmp(aGraphic.GetBitmapEx());
 
-                uno::Reference< rendering::XBitmap > 
xBitmap(vcl::unotools::xBitmapFromBitmapEx(aBmp));
+                uno::Reference< rendering::XBitmap > 
xBitmap(vcl::unotools::xBitmapFromBitmap(aBmp));
 
                 rendering::ViewState aViewState;
                 aViewState.AffineTransform = 
pCanvas->getViewState().AffineTransform;
diff --git a/vcl/source/bitmap/BitmapTools.cxx 
b/vcl/source/bitmap/BitmapTools.cxx
index 24cda45d4bc0..e176b48152e6 100644
--- a/vcl/source/bitmap/BitmapTools.cxx
+++ b/vcl/source/bitmap/BitmapTools.cxx
@@ -114,7 +114,7 @@ void loadFromSvg(SvStream& rStream, const OUString& sPath, 
Bitmap& rBitmap, doub
     if (xBitmap.is())
     {
         const css::uno::Reference<css::rendering::XIntegerReadOnlyBitmap> 
xIntBmp(xBitmap, uno::UNO_QUERY_THROW);
-        rBitmap = Bitmap(vcl::unotools::bitmapExFromXBitmap(xIntBmp));
+        rBitmap = vcl::unotools::bitmapFromXBitmap(xIntBmp);
     }
 
 }
@@ -988,6 +988,225 @@ void CanvasCairoExtractBitmapData( BitmapEx const & 
aBmpEx, const Bitmap & aBitm
 
 }
 
+/**
+ * @param data will be filled with alpha data, if xBitmap is alpha/transparent 
image
+ * @param bHasAlpha will be set to true if resulting surface has alpha
+ **/
+void CanvasCairoExtractBitmapData( const Bitmap & aBitmap, unsigned char*& 
data, bool& bHasAlpha, tools::Long& rnWidth, tools::Long& rnHeight )
+{
+    BitmapScopedReadAccess pBitmapReadAcc( aBitmap );
+    const tools::Long      nWidth = rnWidth = pBitmapReadAcc->Width();
+    const tools::Long      nHeight = rnHeight = pBitmapReadAcc->Height();
+    tools::Long nX, nY;
+    bool bIsAlpha = false;
+
+    data = static_cast<unsigned char*>(malloc( nWidth*nHeight*4 ));
+
+    tools::Long nOff = 0;
+    ::Color aColor;
+    unsigned int nAlpha = 255;
+
+#if !ENABLE_WASM_STRIP_PREMULTIPLY
+    vcl::bitmap::lookup_table const & premultiply_table = 
vcl::bitmap::get_premultiply_table();
+#endif
+    for( nY = 0; nY < nHeight; nY++ )
+    {
+        ::Scanline pReadScan;
+
+        switch( pBitmapReadAcc->GetScanlineFormat() )
+        {
+        case ScanlineFormat::N8BitPal:
+            pReadScan = pBitmapReadAcc->GetScanline( nY );
+
+            for( nX = 0; nX < nWidth; nX++ )
+            {
+#ifdef OSL_BIGENDIAN
+                nAlpha = data[ nOff++ ] = 255;
+#else
+                nAlpha = data[ nOff + 3 ] = 255;
+#endif
+                aColor = pBitmapReadAcc->GetPaletteColor(*pReadScan++);
+
+#ifdef OSL_BIGENDIAN
+#if ENABLE_WASM_STRIP_PREMULTIPLY
+                data[ nOff++ ] = vcl::bitmap::premultiply(aColor.GetRed(), 
nAlpha);
+                data[ nOff++ ] = vcl::bitmap::premultiply(aColor.GetGreen(), 
nAlpha);
+                data[ nOff++ ] = vcl::bitmap::premultiply(aColor.GetBlue(), 
nAlpha);
+#else
+                data[ nOff++ ] = premultiply_table[nAlpha][aColor.GetRed()];
+                data[ nOff++ ] = premultiply_table[nAlpha][aColor.GetGreen()];
+                data[ nOff++ ] = premultiply_table[nAlpha][aColor.GetBlue()];
+#endif
+#else
+#if ENABLE_WASM_STRIP_PREMULTIPLY
+                data[ nOff++ ] = vcl::bitmap::premultiply(aColor.GetBlue(), 
nAlpha);
+                data[ nOff++ ] = vcl::bitmap::premultiply(aColor.GetGreen(), 
nAlpha);
+                data[ nOff++ ] = vcl::bitmap::premultiply(aColor.GetRed(), 
nAlpha);
+#else
+                data[ nOff++ ] = premultiply_table[nAlpha][aColor.GetBlue()];
+                data[ nOff++ ] = premultiply_table[nAlpha][aColor.GetGreen()];
+                data[ nOff++ ] = premultiply_table[nAlpha][aColor.GetRed()];
+#endif
+                nOff++;
+#endif
+            }
+            break;
+        case ScanlineFormat::N24BitTcBgr:
+            pReadScan = pBitmapReadAcc->GetScanline( nY );
+
+            for( nX = 0; nX < nWidth; nX++ )
+            {
+#ifdef OSL_BIGENDIAN
+                nAlpha = data[ nOff ] = 255;
+#if ENABLE_WASM_STRIP_PREMULTIPLY
+                data[ nOff + 3 ] = vcl::bitmap::premultiply(*pReadScan++, 
nAlpha);
+                data[ nOff + 2 ] = vcl::bitmap::premultiply(*pReadScan++, 
nAlpha);
+                data[ nOff + 1 ] = vcl::bitmap::premultiply(*pReadScan++, 
nAlpha);
+#else
+                data[ nOff + 3 ] = premultiply_table[nAlpha][*pReadScan++];
+                data[ nOff + 2 ] = premultiply_table[nAlpha][*pReadScan++];
+                data[ nOff + 1 ] = premultiply_table[nAlpha][*pReadScan++];
+#endif
+                nOff += 4;
+#else
+                nAlpha = data[ nOff + 3 ] = 255;
+#if ENABLE_WASM_STRIP_PREMULTIPLY
+                data[ nOff++ ] = vcl::bitmap::premultiply(*pReadScan++, 
nAlpha);
+                data[ nOff++ ] = vcl::bitmap::premultiply(*pReadScan++, 
nAlpha);
+                data[ nOff++ ] = vcl::bitmap::premultiply(*pReadScan++, 
nAlpha);
+#else
+                data[ nOff++ ] = premultiply_table[nAlpha][*pReadScan++];
+                data[ nOff++ ] = premultiply_table[nAlpha][*pReadScan++];
+                data[ nOff++ ] = premultiply_table[nAlpha][*pReadScan++];
+#endif
+                nOff++;
+#endif
+            }
+            break;
+        case ScanlineFormat::N24BitTcRgb:
+            pReadScan = pBitmapReadAcc->GetScanline( nY );
+
+            for( nX = 0; nX < nWidth; nX++ )
+            {
+#ifdef OSL_BIGENDIAN
+                nAlpha = data[ nOff++ ] = 255;
+#if ENABLE_WASM_STRIP_PREMULTIPLY
+                data[ nOff++ ] = vcl::bitmap::premultiply(*pReadScan++, 
nAlpha);
+                data[ nOff++ ] = vcl::bitmap::premultiply(*pReadScan++, 
nAlpha);
+                data[ nOff++ ] = vcl::bitmap::premultiply(*pReadScan++, 
nAlpha);
+#else
+                data[ nOff++ ] = premultiply_table[nAlpha][*pReadScan++];
+                data[ nOff++ ] = premultiply_table[nAlpha][*pReadScan++];
+                data[ nOff++ ] = premultiply_table[nAlpha][*pReadScan++];
+#endif
+#else
+                nAlpha = data[ nOff + 3 ] = 255;
+#if ENABLE_WASM_STRIP_PREMULTIPLY
+                data[ nOff++ ] = vcl::bitmap::premultiply(pReadScan[ 2 ], 
nAlpha);
+                data[ nOff++ ] = vcl::bitmap::premultiply(pReadScan[ 1 ], 
nAlpha);
+                data[ nOff++ ] = vcl::bitmap::premultiply(pReadScan[ 0 ], 
nAlpha);
+#else
+                data[ nOff++ ] = premultiply_table[nAlpha][pReadScan[ 2 ]];
+                data[ nOff++ ] = premultiply_table[nAlpha][pReadScan[ 1 ]];
+                data[ nOff++ ] = premultiply_table[nAlpha][pReadScan[ 0 ]];
+#endif
+                pReadScan += 3;
+                nOff++;
+#endif
+            }
+            break;
+        case ScanlineFormat::N32BitTcBgra:
+            bIsAlpha = true;
+            [[fallthrough]];
+        case ScanlineFormat::N32BitTcBgrx:
+            pReadScan = pBitmapReadAcc->GetScanline( nY );
+
+            for( nX = 0; nX < nWidth; nX++ )
+            {
+#ifdef OSL_BIGENDIAN
+                if( bIsAlpha )
+                    nAlpha = data[ nOff++ ];
+                else
+                    nAlpha = data[ nOff++ ] = 255;
+#if ENABLE_WASM_STRIP_PREMULTIPLY
+                data[ nOff++ ] = vcl::bitmap::premultiply(pReadScan[ 2 ], 
nAlpha);
+                data[ nOff++ ] = vcl::bitmap::premultiply(pReadScan[ 1 ], 
nAlpha);
+                data[ nOff++ ] = vcl::bitmap::premultiply(pReadScan[ 0 ], 
nAlpha);
+#else
+                data[ nOff++ ] = premultiply_table[nAlpha][pReadScan[ 2 ]];
+                data[ nOff++ ] = premultiply_table[nAlpha][pReadScan[ 1 ]];
+                data[ nOff++ ] = premultiply_table[nAlpha][pReadScan[ 0 ]];
+#endif
+                pReadScan += 4;
+#else
+                if( bIsAlpha )
+                    nAlpha = data[ nOff + 3 ];
+                else
+                    nAlpha = data[ nOff + 3 ] = 255;
+#if ENABLE_WASM_STRIP_PREMULTIPLY
+                data[ nOff++ ] = vcl::bitmap::premultiply(*pReadScan++, 
nAlpha);
+                data[ nOff++ ] = vcl::bitmap::premultiply(*pReadScan++, 
nAlpha);
+                data[ nOff++ ] = vcl::bitmap::premultiply(*pReadScan++, 
nAlpha);
+#else
+                data[ nOff++ ] = premultiply_table[nAlpha][*pReadScan++];
+                data[ nOff++ ] = premultiply_table[nAlpha][*pReadScan++];
+                data[ nOff++ ] = premultiply_table[nAlpha][*pReadScan++];
+#endif
+                pReadScan++;
+                nOff++;
+#endif
+            }
+            break;
+        case ScanlineFormat::N32BitTcRgba:
+            bIsAlpha = true;
+            [[fallthrough]];
+        case ScanlineFormat::N32BitTcRgbx:
+            pReadScan = pBitmapReadAcc->GetScanline( nY );
+
+            for( nX = 0; nX < nWidth; nX++ )
+            {
+#ifdef OSL_BIGENDIAN
+                if( bIsAlpha )
+                    nAlpha = data[ nOff ++ ];
+                else
+                    nAlpha = data[ nOff ++ ] = 255;
+#if ENABLE_WASM_STRIP_PREMULTIPLY
+                data[ nOff++ ] = vcl::bitmap::premultiply(*pReadScan++, 
nAlpha);
+                data[ nOff++ ] = vcl::bitmap::premultiply(*pReadScan++, 
nAlpha);
+                data[ nOff++ ] = vcl::bitmap::premultiply(*pReadScan++, 
nAlpha);
+#else
+                data[ nOff++ ] = premultiply_table[nAlpha][*pReadScan++];
+                data[ nOff++ ] = premultiply_table[nAlpha][*pReadScan++];
+                data[ nOff++ ] = premultiply_table[nAlpha][*pReadScan++];
+#endif
+                pReadScan++;
+#else
+                if( bIsAlpha )
+                    nAlpha = data[ nOff + 3 ];
+                else
+                    nAlpha = data[ nOff + 3 ] = 255;
+#if ENABLE_WASM_STRIP_PREMULTIPLY
+                data[ nOff++ ] = vcl::bitmap::premultiply(pReadScan[ 2 ], 
nAlpha);
+                data[ nOff++ ] = vcl::bitmap::premultiply(pReadScan[ 1 ], 
nAlpha);
+                data[ nOff++ ] = vcl::bitmap::premultiply(pReadScan[ 0 ], 
nAlpha);
+#else
+                data[ nOff++ ] = premultiply_table[nAlpha][pReadScan[ 2 ]];
+                data[ nOff++ ] = premultiply_table[nAlpha][pReadScan[ 1 ]];
+                data[ nOff++ ] = premultiply_table[nAlpha][pReadScan[ 0 ]];
+#endif
+                pReadScan += 4;
+                nOff++;
+#endif
+            }
+            break;
+        default:
+            assert(false && "unknown format");
+        }
+    }
+
+    bHasAlpha = bIsAlpha;
+}
+
     uno::Sequence< sal_Int8 > CanvasExtractBitmapData(BitmapEx const & 
rBitmapEx, const geometry::IntegerRectangle2D& rect)
     {
         const Bitmap& aBitmap( rBitmapEx.GetBitmap() );
diff --git a/vcl/source/helper/canvastools.cxx 
b/vcl/source/helper/canvastools.cxx
index 7dbfbc649c1d..6b7f7747e0ad 100644
--- a/vcl/source/helper/canvastools.cxx
+++ b/vcl/source/helper/canvastools.cxx
@@ -49,13 +49,6 @@ using namespace ::com::sun::star;
 
 namespace vcl::unotools
 {
-        uno::Reference< rendering::XBitmap > xBitmapFromBitmapEx(const 
::BitmapEx& inputBitmap )
-        {
-            SAL_INFO( "vcl.helper", "vcl::unotools::xBitmapFromBitmapEx()" );
-
-            return new vcl::unotools::VclCanvasBitmap( Bitmap(inputBitmap) );
-        }
-
         uno::Reference< rendering::XBitmap > xBitmapFromBitmap(const ::Bitmap& 
inputBitmap )
         {
             SAL_INFO( "vcl.helper", "vcl::unotools::xBitmapFromBitmapEx()" );
@@ -156,11 +149,6 @@ namespace vcl::unotools
             }
         }
 
-        ::BitmapEx bitmapExFromXBitmap( const uno::Reference< 
rendering::XIntegerReadOnlyBitmap >& xInputBitmap )
-        {
-            return BitmapEx(bitmapFromXBitmap(xInputBitmap));
-        }
-
         ::Bitmap bitmapFromXBitmap( const uno::Reference< 
rendering::XIntegerReadOnlyBitmap >& xInputBitmap )
         {
             SAL_INFO( "vcl.helper", "vcl::unotools::bitmapExFromXBitmap()" );

Reply via email to