summaryrefslogtreecommitdiff
path: root/vcl/source/gdi/bmpacc.cxx
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2017-03-09 14:18:35 +0000
committerCaolán McNamara <caolanm@redhat.com>2017-03-09 16:19:55 +0000
commit25a5458e751f34063686c4fecd7b8bfc8a78302d (patch)
tree88d81ed9a3b75a335f5c38f43eca2b8201b563cf /vcl/source/gdi/bmpacc.cxx
parent82e92bb15d26fff2d07736e2a6193cac1915b44d (diff)
just calculate the scanline positions
rather than generating a big offset table to dramatically reduce the amount of memory loading graphics takes Change-Id: I8a4b1dc5cbcb686d6b8570f2eeef61ee0fe25515 Reviewed-on: https://gerrit.libreoffice.org/35005 Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'vcl/source/gdi/bmpacc.cxx')
-rw-r--r--vcl/source/gdi/bmpacc.cxx39
1 files changed, 3 insertions, 36 deletions
diff --git a/vcl/source/gdi/bmpacc.cxx b/vcl/source/gdi/bmpacc.cxx
index 2e987fa2abf9..cddc1210630f 100644
--- a/vcl/source/gdi/bmpacc.cxx
+++ b/vcl/source/gdi/bmpacc.cxx
@@ -102,7 +102,6 @@ sal_uInt16 BitmapInfoAccess::GetBestPaletteIndex( const BitmapColor& rBitmapColo
BitmapReadAccess::BitmapReadAccess( Bitmap& rBitmap, BitmapAccessMode nMode ) :
BitmapInfoAccess( rBitmap, nMode ),
- mpScanBuf ( nullptr ),
mFncGetPixel ( nullptr ),
mFncSetPixel ( nullptr )
{
@@ -111,7 +110,6 @@ BitmapReadAccess::BitmapReadAccess( Bitmap& rBitmap, BitmapAccessMode nMode ) :
BitmapReadAccess::BitmapReadAccess( Bitmap& rBitmap ) :
BitmapInfoAccess( rBitmap, BitmapAccessMode::Read ),
- mpScanBuf ( nullptr ),
mFncGetPixel ( nullptr ),
mFncSetPixel ( nullptr )
{
@@ -120,7 +118,6 @@ BitmapReadAccess::BitmapReadAccess( Bitmap& rBitmap ) :
BitmapReadAccess::~BitmapReadAccess()
{
- ImplClearScanBuffer();
}
void BitmapReadAccess::ImplInitScanBuffer( Bitmap& rBitmap )
@@ -134,45 +131,15 @@ void BitmapReadAccess::ImplInitScanBuffer( Bitmap& rBitmap )
maColorMask = mpBuffer->maColorMask;
- bool bOk(true);
- const long nHeight = mpBuffer->mnHeight;
- Scanline pTmpLine = mpBuffer->mpBits;
- try
- {
- mpScanBuf = new Scanline[ nHeight ];
- if( mpBuffer->mnFormat & ScanlineFormat::TopDown )
- {
- for( long nY = 0; nY < nHeight; nY++, pTmpLine += mpBuffer->mnScanlineSize )
- mpScanBuf[ nY ] = pTmpLine;
- }
- else
- {
- for( long nY = nHeight - 1; nY >= 0; nY--, pTmpLine += mpBuffer->mnScanlineSize )
- mpScanBuf[ nY ] = pTmpLine;
- }
- bOk = ImplSetAccessPointers(RemoveScanline(mpBuffer->mnFormat));
- }
- catch (const std::bad_alloc&)
- {
- bOk = false;
- }
+ bool bOk = ImplSetAccessPointers(RemoveScanline(mpBuffer->mnFormat));
if (!bOk)
{
- delete[] mpScanBuf;
- mpScanBuf = nullptr;
-
xImpBmp->ImplReleaseBuffer( mpBuffer, mnAccessMode );
mpBuffer = nullptr;
}
}
-void BitmapReadAccess::ImplClearScanBuffer()
-{
- delete[] mpScanBuf;
- mpScanBuf = nullptr;
-}
-
bool BitmapReadAccess::ImplSetAccessPointers( ScanlineFormat nFormat )
{
bool bRet = true;
@@ -405,7 +372,7 @@ void BitmapWriteAccess::CopyScanline( long nY, const BitmapReadAccess& rReadAcc
if( ( GetScanlineFormat() == rReadAcc.GetScanlineFormat() ) &&
( GetScanlineSize() >= rReadAcc.GetScanlineSize() ) )
{
- memcpy( mpScanBuf[ nY ], rReadAcc.GetScanline( nY ), rReadAcc.GetScanlineSize() );
+ memcpy(GetScanline(nY), rReadAcc.GetScanline(nY), rReadAcc.GetScanlineSize());
}
else
// TODO: use fastbmp infrastructure
@@ -428,7 +395,7 @@ void BitmapWriteAccess::CopyScanline( long nY, ConstScanline aSrcScanline,
if( nCount )
{
if( GetScanlineFormat() == RemoveScanline( nSrcScanlineFormat ) )
- memcpy( mpScanBuf[ nY ], aSrcScanline, nCount );
+ memcpy(GetScanline(nY), aSrcScanline, nCount);
else
{
DBG_ASSERT( nFormat != ScanlineFormat::N8BitTcMask &&