vcl/source/outdev/bitmap.cxx | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-)
New commits: commit 4a133770430a90050a5f78c3e1e2bd92770c8b91 Author: Christopher Sherlock <chris.sherloc...@gmail.com> AuthorDate: Sat Aug 2 16:46:11 2025 +1000 Commit: Noel Grandin <noel.gran...@collabora.co.uk> CommitDate: Mon Aug 11 08:20:39 2025 +0200 vcl: move bitmap readers into lcl_BlendBitmapWithAlpha() Change-Id: Ie0bdba4a43823822a4b25ad37986718222f5c7e5 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/188804 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk> diff --git a/vcl/source/outdev/bitmap.cxx b/vcl/source/outdev/bitmap.cxx index 653f9dddf124..d22d42f7b1db 100644 --- a/vcl/source/outdev/bitmap.cxx +++ b/vcl/source/outdev/bitmap.cxx @@ -444,8 +444,8 @@ BitmapColor lcl_AlphaBlendColors(const BitmapColor& rCol1, const BitmapColor& rC Bitmap lcl_BlendBitmapWithAlpha( Bitmap& aBmp, - BitmapReadAccess const* pSrcBmp, - BitmapReadAccess const* pSrcAlphaBmp, + const Bitmap& rBitmap, + const AlphaMask& rAlpha, const sal_Int32 nDstHeight, const sal_Int32 nDstWidth, const sal_Int32* pMapX, @@ -454,6 +454,9 @@ Bitmap lcl_BlendBitmapWithAlpha( { Bitmap res; + BitmapScopedReadAccess pSrcBmp(rBitmap); + BitmapScopedReadAccess pSrcAlphaBmp(rAlpha); + { BitmapScopedWriteAccess pDstBmp(aBmp); if (pDstBmp && pSrcBmp && pSrcAlphaBmp) @@ -524,11 +527,12 @@ void OutputDevice::DrawDeviceAlphaBitmapSlowPath(const Bitmap& rBitmap, TradScaleContext aTradContext(aDstRect, aBmpRect, aOutSize, nOffX, nOffY); - BitmapScopedReadAccess pBitmapReadAccess(rBitmap); - BitmapScopedReadAccess pAlphaReadAccess(rAlpha); + BitmapScopedReadAccess pCheckAlphaReadAccess(rAlpha); + + SAL_WARN_IF(pCheckAlphaReadAccess->GetScanlineFormat() != ScanlineFormat::N8BitPal, "vcl.gdi", "non-8bit alpha no longer supported!"); + assert(pCheckAlphaReadAccess->GetScanlineFormat() == ScanlineFormat::N8BitPal); - SAL_WARN_IF(pAlphaReadAccess->GetScanlineFormat() != ScanlineFormat::N8BitPal, "vcl.gdi", "non-8bit alpha no longer supported!"); - assert(pAlphaReadAccess->GetScanlineFormat() == ScanlineFormat::N8BitPal); + pCheckAlphaReadAccess.reset(); // #i38887# reading from screen may sometimes fail if (aDeviceBmp.ImplGetSalBitmap()) @@ -536,10 +540,9 @@ void OutputDevice::DrawDeviceAlphaBitmapSlowPath(const Bitmap& rBitmap, Bitmap aNewBitmap; aNewBitmap = lcl_BlendBitmapWithAlpha( - aDeviceBmp, pBitmapReadAccess.get(), pAlphaReadAccess.get(), - nDstHeight, - nDstWidth, + aDeviceBmp, rBitmap, rAlpha, nDstHeight, nDstWidth, aTradContext.mpMapX.get(), aTradContext.mpMapY.get() ); + DrawBitmap(aDstRect.TopLeft(), aNewBitmap); }