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@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
This commit is contained in:
parent
62275a93e3
commit
09cf2f4242
@ -117,60 +117,15 @@ namespace vclcanvas
|
|||||||
return uno::Sequence< sal_Int8 >(); // we're disposed
|
return uno::Sequence< sal_Int8 >(); // we're disposed
|
||||||
|
|
||||||
rLayout = getMemoryLayout();
|
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.
|
// TODO(F1): Support more formats.
|
||||||
const Size aBmpSize( aBitmap.GetSizePixel() );
|
const Size aBmpSize( mpBackBuffer->getBitmapReference().GetSizePixel() );
|
||||||
|
|
||||||
rLayout.ScanLines = aBmpSize.Height();
|
rLayout.ScanLines = aBmpSize.Height();
|
||||||
rLayout.ScanLineBytes = aBmpSize.Width()*4;
|
rLayout.ScanLineBytes = aBmpSize.Width()*4;
|
||||||
rLayout.ScanLineStride = rLayout.ScanLineBytes;
|
rLayout.ScanLineStride = rLayout.ScanLineBytes;
|
||||||
|
|
||||||
// for the time being, always return as BGRA
|
uno::Sequence< sal_Int8 > aRes = vcl::bitmap::CanvasExtractBitmapData(mpBackBuffer->getBitmapReference(), rect);
|
||||||
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;
|
return aRes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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 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
|
}} // end vcl::bitmap
|
||||||
|
|
||||||
#endif // INCLUDED_VCL_BITMAP_TOOLS_HXX
|
#endif // INCLUDED_VCL_BITMAP_TOOLS_HXX
|
||||||
|
@ -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
|
}} // end vcl::bitmap
|
||||||
|
|
||||||
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user