diff --git a/include/vcl/BitmapTools.hxx b/include/vcl/BitmapTools.hxx index 8b1a81413d01..7ca5891f5f90 100644 --- a/include/vcl/BitmapTools.hxx +++ b/include/vcl/BitmapTools.hxx @@ -46,7 +46,10 @@ void loadFromSvg(SvStream& rStream, const OUString& sPath, BitmapEx& rBitmapEx, @param nStride The number of bytes in a scanline, must be >= (width * bitcount / 8) */ -BitmapEx VCL_DLLPUBLIC CreateFromData( sal_uInt8 const *pData, sal_Int32 nWidth, sal_Int32 nHeight, sal_Int32 nStride, vcl::PixelFormat ePixelFormat, bool bReversColors = false); +BitmapEx VCL_DLLPUBLIC CreateFromData(sal_uInt8 const *pData, + sal_Int32 nWidth, sal_Int32 nHeight, sal_Int32 nStride, + vcl::PixelFormat ePixelFormat, + bool bReversColors = false, bool bReverseAlpha = false); BitmapEx VCL_DLLPUBLIC CreateFromData( RawBitmap && data ); diff --git a/vcl/source/bitmap/BitmapTools.cxx b/vcl/source/bitmap/BitmapTools.cxx index 92b3175143f2..eddef22cfb53 100644 --- a/vcl/source/bitmap/BitmapTools.cxx +++ b/vcl/source/bitmap/BitmapTools.cxx @@ -128,7 +128,9 @@ void loadFromSvg(SvStream& rStream, const OUString& sPath, BitmapEx& rBitmapEx, @param bReversColors In case the endianness of pData is wrong, you could reverse colors */ -BitmapEx CreateFromData( sal_uInt8 const *pData, sal_Int32 nWidth, sal_Int32 nHeight, sal_Int32 nStride, vcl::PixelFormat ePixelFormat, bool bReversColors ) +BitmapEx CreateFromData(sal_uInt8 const *pData, sal_Int32 nWidth, sal_Int32 nHeight, + sal_Int32 nStride, vcl::PixelFormat ePixelFormat, + bool bReversColors, bool bReverseAlpha) { auto nBitCount = sal_uInt16(ePixelFormat); @@ -184,7 +186,8 @@ BitmapEx CreateFromData( sal_uInt8 const *pData, sal_Int32 nWidth, sal_Int32 nHe Scanline pMaskScanLine = xMaskAcc->GetScanline(y); for (tools::Long x = 0; x < nWidth; ++x) { - xMaskAcc->SetPixelOnData(pMaskScanLine, x, BitmapColor(*p)); + const sal_uInt8 nValue = bReverseAlpha ? 0xff - *p : *p; + xMaskAcc->SetPixelOnData(pMaskScanLine, x, BitmapColor(nValue)); p += 4; } }