include/vcl/BitmapTools.hxx | 1 vcl/source/bitmap/BitmapTools.cxx | 337 -------------------------------------- 2 files changed, 338 deletions(-)
New commits: commit bff08d97dfcd8bf2ce9e61010f47c5b4ce717f13 Author: Noel Grandin <noel.gran...@collabora.co.uk> AuthorDate: Fri Aug 15 11:08:38 2025 +0200 Commit: Noel Grandin <noel.gran...@collabora.co.uk> CommitDate: Mon Aug 18 19:09:18 2025 +0200 remove unused CanvasCairoExtractBitmapData function Change-Id: Ib20826876a687a2736422e6e442340a870ba393f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/189667 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk> diff --git a/include/vcl/BitmapTools.hxx b/include/vcl/BitmapTools.hxx index ef28f445f1c7..152466792b42 100644 --- a/include/vcl/BitmapTools.hxx +++ b/include/vcl/BitmapTools.hxx @@ -79,7 +79,6 @@ VCL_DLLPUBLIC css::uno::Sequence< sal_Int8 > GetMaskDIB(Bitmap const & aBmp); * @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 **/ -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(Bitmap const & rBitmap, const css::geometry::IntegerRectangle2D& rect); diff --git a/vcl/source/bitmap/BitmapTools.cxx b/vcl/source/bitmap/BitmapTools.cxx index febb4d2331e2..85e40b8540be 100644 --- a/vcl/source/bitmap/BitmapTools.cxx +++ b/vcl/source/bitmap/BitmapTools.cxx @@ -650,343 +650,6 @@ css::uno::Sequence< sal_Int8 > GetMaskDIB(Bitmap const & rBmp) return GetMaskDIB(BitmapEx(rBmp)); } -static bool readAlpha( BitmapReadAccess const * pAlphaReadAcc, tools::Long nY, const tools::Long nWidth, unsigned char* data, tools::Long nOff ) -{ - bool bIsAlpha = false; - tools::Long nX; - int nAlpha; - Scanline pReadScan; - - nOff += 3; - - switch( pAlphaReadAcc->GetScanlineFormat() ) - { - case ScanlineFormat::N8BitPal: - pReadScan = pAlphaReadAcc->GetScanline( nY ); - for( nX = 0; nX < nWidth; nX++ ) - { - BitmapColor const& rColor( - pAlphaReadAcc->GetPaletteColor(*pReadScan)); - pReadScan++; - nAlpha = data[ nOff ] = rColor.GetIndex(); - if( nAlpha != 255 ) - bIsAlpha = true; - nOff += 4; - } - break; - default: - SAL_INFO( "canvas.cairo", "fallback to GetColor for alpha - slow, format: " << static_cast<int>(pAlphaReadAcc->GetScanlineFormat()) ); - for( nX = 0; nX < nWidth; nX++ ) - { - nAlpha = data[ nOff ] = pAlphaReadAcc->GetColor( nY, nX ).GetIndex(); - if( nAlpha != 255 ) - bIsAlpha = true; - nOff += 4; - } - } - - return bIsAlpha; -} - - - -/** - * @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( BitmapEx const & aBmpEx, const Bitmap & aBitmap, unsigned char*& data, bool& bHasAlpha, tools::Long& rnWidth, tools::Long& rnHeight ) -{ - const AlphaMask& aAlpha = aBmpEx.GetAlphaMask(); - - BitmapScopedReadAccess pBitmapReadAcc( aBitmap ); - BitmapScopedReadAccess pAlphaReadAcc; - const tools::Long nWidth = rnWidth = pBitmapReadAcc->Width(); - const tools::Long nHeight = rnHeight = pBitmapReadAcc->Height(); - tools::Long nX, nY; - bool bIsAlpha = false; - - if( aBmpEx.IsAlpha() ) - pAlphaReadAcc = aAlpha; - - 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 ); - if( pAlphaReadAcc ) - if( readAlpha( pAlphaReadAcc.get(), nY, nWidth, data, nOff ) ) - bIsAlpha = true; - - for( nX = 0; nX < nWidth; nX++ ) - { -#ifdef OSL_BIGENDIAN - if( pAlphaReadAcc ) - nAlpha = data[ nOff++ ]; - else - nAlpha = data[ nOff++ ] = 255; -#else - if( pAlphaReadAcc ) - nAlpha = data[ nOff + 3 ]; - 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 ); - if( pAlphaReadAcc ) - if( readAlpha( pAlphaReadAcc.get(), nY, nWidth, data, nOff ) ) - bIsAlpha = true; - - for( nX = 0; nX < nWidth; nX++ ) - { -#ifdef OSL_BIGENDIAN - if( pAlphaReadAcc ) - nAlpha = data[ nOff ]; - else - 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 - if( pAlphaReadAcc ) - 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 - nOff++; -#endif - } - break; - case ScanlineFormat::N24BitTcRgb: - pReadScan = pBitmapReadAcc->GetScanline( nY ); - if( pAlphaReadAcc ) - if( readAlpha( pAlphaReadAcc.get(), nY, nWidth, data, nOff ) ) - bIsAlpha = true; - - for( nX = 0; nX < nWidth; nX++ ) - { -#ifdef OSL_BIGENDIAN - if( pAlphaReadAcc ) - 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 -#else - if( pAlphaReadAcc ) - 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 += 3; - nOff++; -#endif - } - break; - case ScanlineFormat::N32BitTcBgra: - case ScanlineFormat::N32BitTcBgrx: - pReadScan = pBitmapReadAcc->GetScanline( nY ); - if( pAlphaReadAcc ) - if( readAlpha( pAlphaReadAcc.get(), nY, nWidth, data, nOff ) ) - bIsAlpha = true; - - for( nX = 0; nX < nWidth; nX++ ) - { -#ifdef OSL_BIGENDIAN - if( pAlphaReadAcc ) - 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( pAlphaReadAcc ) - 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: - case ScanlineFormat::N32BitTcRgbx: - pReadScan = pBitmapReadAcc->GetScanline( nY ); - if( pAlphaReadAcc ) - if( readAlpha( pAlphaReadAcc.get(), nY, nWidth, data, nOff ) ) - bIsAlpha = true; - - for( nX = 0; nX < nWidth; nX++ ) - { -#ifdef OSL_BIGENDIAN - if( pAlphaReadAcc ) - 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( pAlphaReadAcc ) - 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: - SAL_INFO( "canvas.cairo", "fallback to GetColor - slow, format: " << static_cast<int>(pBitmapReadAcc->GetScanlineFormat()) ); - - if( pAlphaReadAcc ) - if( readAlpha( pAlphaReadAcc.get(), nY, nWidth, data, nOff ) ) - bIsAlpha = true; - - for( nX = 0; nX < nWidth; nX++ ) - { - aColor = pBitmapReadAcc->GetColor( nY, nX ); - - // cairo need premultiplied color values - // TODO(rodo) handle endianness -#ifdef OSL_BIGENDIAN - if( pAlphaReadAcc ) - nAlpha = data[ nOff++ ]; - else - nAlpha = data[ nOff++ ] = 255; -#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( pAlphaReadAcc ) - nAlpha = data[ nOff + 3 ]; - else - nAlpha = data[ nOff + 3 ] = 255; -#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 - } - } - } - - bHasAlpha = bIsAlpha; - -} - /** * This returns data formatted the way Cairo wants it, i.e. either CAIRO_FORMAT_ARGB32 or CAIRO_FORMAT_RGB24 *