[Libreoffice-commits] core.git: canvas/source include/vcl vcl/source
Noel Grandin
noel.grandin at collabora.co.uk
Mon Mar 19 06:36:49 UTC 2018
canvas/source/vcl/canvasbitmaphelper.cxx | 49 +---------------------------
include/vcl/BitmapTools.hxx | 2 +
vcl/source/bitmap/BitmapTools.cxx | 53 +++++++++++++++++++++++++++++++
3 files changed, 57 insertions(+), 47 deletions(-)
New commits:
commit 09cf2f4242250ac8d1ec6440c46dc85ba1a8dc09
Author: Noel Grandin <noel.grandin at collabora.co.uk>
Date: Fri Mar 16 15:40:29 2018 +0200
move bitmap copy code from CanvasBitmapHelper to vcl
part of making GetAlpha/GetMask an internal detail of vcl
Change-Id: Ie1740df3d6435d9f0f2de3297e7f224d2c6b3cc5
Reviewed-on: https://gerrit.libreoffice.org/51436
Tested-by: Jenkins <ci at libreoffice.org>
Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>
diff --git a/canvas/source/vcl/canvasbitmaphelper.cxx b/canvas/source/vcl/canvasbitmaphelper.cxx
index eef6258dded3..3d99a3bcbe6e 100644
--- a/canvas/source/vcl/canvasbitmaphelper.cxx
+++ b/canvas/source/vcl/canvasbitmaphelper.cxx
@@ -117,60 +117,15 @@ namespace vclcanvas
return uno::Sequence< sal_Int8 >(); // we're disposed
rLayout = getMemoryLayout();
- Bitmap aBitmap( mpBackBuffer->getBitmapReference().GetBitmap() );
- Bitmap aAlpha( mpBackBuffer->getBitmapReference().GetAlpha().GetBitmap() );
-
- Bitmap::ScopedReadAccess pReadAccess( aBitmap );
- Bitmap::ScopedReadAccess pAlphaReadAccess( aAlpha.IsEmpty() ?
- nullptr : aAlpha.AcquireReadAccess(),
- aAlpha );
-
- ENSURE_OR_THROW( pReadAccess.get() != nullptr,
- "Could not acquire read access to bitmap" );
// TODO(F1): Support more formats.
- const Size aBmpSize( aBitmap.GetSizePixel() );
+ const Size aBmpSize( mpBackBuffer->getBitmapReference().GetSizePixel() );
rLayout.ScanLines = aBmpSize.Height();
rLayout.ScanLineBytes = aBmpSize.Width()*4;
rLayout.ScanLineStride = rLayout.ScanLineBytes;
- // for the time being, always return as BGRA
- uno::Sequence< sal_Int8 > aRes( 4*aBmpSize.Width()*aBmpSize.Height() );
- sal_Int8* pRes = aRes.getArray();
-
- int nCurrPos(0);
- for( long y=rect.Y1;
- y<aBmpSize.Height() && y<rect.Y2;
- ++y )
- {
- Scanline pScanlineReadAlpha = pAlphaReadAccess->GetScanline( y );
- if( pAlphaReadAccess.get() != nullptr )
- {
- for( long x=rect.X1;
- x<aBmpSize.Width() && x<rect.X2;
- ++x )
- {
- pRes[ nCurrPos++ ] = pReadAccess->GetColor( y, x ).GetRed();
- pRes[ nCurrPos++ ] = pReadAccess->GetColor( y, x ).GetGreen();
- pRes[ nCurrPos++ ] = pReadAccess->GetColor( y, x ).GetBlue();
- pRes[ nCurrPos++ ] = pAlphaReadAccess->GetIndexFromData( pScanlineReadAlpha, x );
- }
- }
- else
- {
- for( long x=rect.X1;
- x<aBmpSize.Width() && x<rect.X2;
- ++x )
- {
- pRes[ nCurrPos++ ] = pReadAccess->GetColor( y, x ).GetRed();
- pRes[ nCurrPos++ ] = pReadAccess->GetColor( y, x ).GetGreen();
- pRes[ nCurrPos++ ] = pReadAccess->GetColor( y, x ).GetBlue();
- pRes[ nCurrPos++ ] = sal_uInt8(255);
- }
- }
- }
-
+ uno::Sequence< sal_Int8 > aRes = vcl::bitmap::CanvasExtractBitmapData(mpBackBuffer->getBitmapReference(), rect);
return aRes;
}
diff --git a/include/vcl/BitmapTools.hxx b/include/vcl/BitmapTools.hxx
index 9c347d275f4b..43f0d07579f7 100644
--- a/include/vcl/BitmapTools.hxx
+++ b/include/vcl/BitmapTools.hxx
@@ -104,6 +104,8 @@ VCL_DLLPUBLIC css::uno::Sequence< sal_Int8 > GetMaskDIB(BitmapEx const & aBmpEx)
**/
VCL_DLLPUBLIC void CanvasCairoExtractBitmapData( BitmapEx & rBmpEx, Bitmap & rBitmap, unsigned char*& data, bool& bHasAlpha );
+VCL_DLLPUBLIC css::uno::Sequence< sal_Int8 > CanvasExtractBitmapData(BitmapEx & rBitmapEx, const css::geometry::IntegerRectangle2D& rect);
+
}} // end vcl::bitmap
#endif // INCLUDED_VCL_BITMAP_TOOLS_HXX
diff --git a/vcl/source/bitmap/BitmapTools.cxx b/vcl/source/bitmap/BitmapTools.cxx
index 816bad119e13..7a722a699043 100644
--- a/vcl/source/bitmap/BitmapTools.cxx
+++ b/vcl/source/bitmap/BitmapTools.cxx
@@ -939,6 +939,59 @@ void CanvasCairoExtractBitmapData( BitmapEx & aBmpEx, Bitmap & aBitmap, unsigned
}
+ uno::Sequence< sal_Int8 > CanvasExtractBitmapData(BitmapEx & rBitmapEx, const geometry::IntegerRectangle2D& rect)
+ {
+ Bitmap aBitmap( rBitmapEx.GetBitmap() );
+ Bitmap aAlpha( rBitmapEx.GetAlpha().GetBitmap() );
+
+ Bitmap::ScopedReadAccess pReadAccess( aBitmap );
+ Bitmap::ScopedReadAccess pAlphaReadAccess( aAlpha.IsEmpty() ?
+ nullptr : aAlpha.AcquireReadAccess(),
+ aAlpha );
+
+ assert( pReadAccess );
+
+ // TODO(F1): Support more formats.
+ const Size aBmpSize( aBitmap.GetSizePixel() );
+
+ // for the time being, always return as BGRA
+ uno::Sequence< sal_Int8 > aRes( 4*aBmpSize.Width()*aBmpSize.Height() );
+ sal_Int8* pRes = aRes.getArray();
+
+ int nCurrPos(0);
+ for( long y=rect.Y1;
+ y<aBmpSize.Height() && y<rect.Y2;
+ ++y )
+ {
+ Scanline pScanlineReadAlpha = pAlphaReadAccess->GetScanline( y );
+ if( pAlphaReadAccess.get() != nullptr )
+ {
+ for( long x=rect.X1;
+ x<aBmpSize.Width() && x<rect.X2;
+ ++x )
+ {
+ pRes[ nCurrPos++ ] = pReadAccess->GetColor( y, x ).GetRed();
+ pRes[ nCurrPos++ ] = pReadAccess->GetColor( y, x ).GetGreen();
+ pRes[ nCurrPos++ ] = pReadAccess->GetColor( y, x ).GetBlue();
+ pRes[ nCurrPos++ ] = pAlphaReadAccess->GetIndexFromData( pScanlineReadAlpha, x );
+ }
+ }
+ else
+ {
+ for( long x=rect.X1;
+ x<aBmpSize.Width() && x<rect.X2;
+ ++x )
+ {
+ pRes[ nCurrPos++ ] = pReadAccess->GetColor( y, x ).GetRed();
+ pRes[ nCurrPos++ ] = pReadAccess->GetColor( y, x ).GetGreen();
+ pRes[ nCurrPos++ ] = pReadAccess->GetColor( y, x ).GetBlue();
+ pRes[ nCurrPos++ ] = sal_uInt8(255);
+ }
+ }
+ }
+ return aRes;
+ }
+
}} // end vcl::bitmap
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
More information about the Libreoffice-commits
mailing list