diff options
author | Noel Grandin <noel.grandin@collabora.co.uk> | 2018-03-16 15:30:43 +0200 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2018-03-19 07:36:22 +0100 |
commit | 62275a93e3b13a20aa1de7945a32a0d25582c1ca (patch) | |
tree | ba0f5a3ef6533b4a279eac66b5135aeffe96f486 /vcl | |
parent | e9c74a075c3c0809b993c017c11d1505bd244dc8 (diff) |
move pixel color extracting from canvas to BitmapEx
part of making GetAlpha/GetMask an internal detail of vcl
Change-Id: I874a68f340cd3074cfbeb6303f52adeeb13e56a5
Reviewed-on: https://gerrit.libreoffice.org/51435
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'vcl')
-rw-r--r-- | vcl/source/gdi/bitmapex.cxx | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/vcl/source/gdi/bitmapex.cxx b/vcl/source/gdi/bitmapex.cxx index 14b3fa17efd6..dba603347679 100644 --- a/vcl/source/gdi/bitmapex.cxx +++ b/vcl/source/gdi/bitmapex.cxx @@ -769,6 +769,27 @@ sal_uInt8 BitmapEx::GetTransparency(sal_Int32 nX, sal_Int32 nY) const return nTransparency; } + +Color BitmapEx::GetPixelColor(sal_Int32 nX, sal_Int32 nY) const +{ + Bitmap aAlpha( GetAlpha().GetBitmap() ); + + Bitmap aTestBitmap(maBitmap); + Bitmap::ScopedReadAccess pReadAccess( aTestBitmap ); + assert( pReadAccess ); + + Color aColor = pReadAccess->GetColor( nY, nX ).GetColor(); + + if (!aAlpha.IsEmpty()) + { + Bitmap::ScopedReadAccess pAlphaReadAccess( aAlpha.AcquireReadAccess(), aAlpha ); + aColor.SetTransparency( pAlphaReadAccess->GetPixel( nY, nX ).GetIndex() ); + } + else + aColor.SetTransparency(255); + return aColor; +} + // Shift alpha transparent pixels between cppcanvas/ implementations // and vcl in a generally grotesque and under-performing fashion bool BitmapEx::Create( const css::uno::Reference< css::rendering::XBitmapCanvas > &xBitmapCanvas, |