vcl/source/bitmap/bitmapscalesuper.cxx | 603 +++++++++++++++------------------ 1 file changed, 291 insertions(+), 312 deletions(-)
New commits: commit 00c56138f11597bb16bbe9e80746d0b1bee34786 Author: Michael Meeks <[email protected]> Date: Thu Oct 16 08:46:11 2014 -0300 vcl: parallelize image scaling. Change-Id: Ia452487c0c8c66a35c4b9fba225348bdef1a27f7 diff --git a/vcl/source/bitmap/bitmapscalesuper.cxx b/vcl/source/bitmap/bitmapscalesuper.cxx index 29819c9..4e734c4 100644 --- a/vcl/source/bitmap/bitmapscalesuper.cxx +++ b/vcl/source/bitmap/bitmapscalesuper.cxx @@ -20,6 +20,9 @@ #include <vcl/bmpacc.hxx> #include <vcl/bitmapscalesuper.hxx> +#include <algorithm> +#include <thread> +#include <osl/thread.hxx> #include <boost/scoped_array.hpp> namespace { @@ -71,11 +74,38 @@ struct ScaleContext { } }; +#define SCALE_THREAD_STRIP 32 +struct ScaleRangeContext { + ScaleContext &mrCtx; + long mnStartY, mnEndY; + ScaleRangeContext( ScaleContext &rCtx, long nStartY ) + : mrCtx( rCtx ), mnStartY( nStartY ), + mnEndY( nStartY + SCALE_THREAD_STRIP ) {} +}; + +typedef void (*ScaleRangeFn)(ScaleContext &rCtx, long nStartY, long nEndY); + +// FIXME: should really be pooled & managed intelligently etc. +class ScaleThread : public osl::Thread +{ + ScaleRangeFn mpFn; + std::vector< ScaleRangeContext > maStrips; +public: + ScaleThread( ScaleRangeFn pFn ) : mpFn( pFn ) {} + void push( ScaleRangeContext &aRC ) { maStrips.push_back( aRC ); } + virtual void SAL_CALL run() SAL_OVERRIDE + { + std::vector< ScaleRangeContext >::iterator it; + for (it = maStrips.begin(); it != maStrips.end(); ++it) + mpFn( it->mrCtx, it->mnStartY, it->mnEndY ); + } +}; + void scalePallete8bit(ScaleContext &rCtx, long nStartY, long nEndY) { const long nStartX = 0, nEndX = rCtx.mnDestW - 1L; - for( long nY = nStartY, nYDst = 0L; nY <= nEndY; nY++, nYDst++ ) + for( long nY = nStartY; nY <= nEndY; nY++ ) { long nTempY = rCtx.mpMapIY[ nY ]; long nTempFY = rCtx.mpMapFY[ nY ]; @@ -103,7 +133,7 @@ void scalePallete8bit(ScaleContext &rCtx, long nStartY, long nEndY) BitmapColor aColRes( MAP( cR0, cR1, nTempFY ), MAP( cG0, cG1, nTempFY ), MAP( cB0, cB1, nTempFY ) ); - rCtx.mpDest->SetPixel( nYDst, nXDst++, aColRes ); + rCtx.mpDest->SetPixel( nY, nXDst++, aColRes ); } } } @@ -112,7 +142,7 @@ void scalePalleteGeneral(ScaleContext &rCtx, long nStartY, long nEndY) { const long nStartX = 0, nEndX = rCtx.mnDestW - 1L; - for( long nY = nStartY, nYDst = 0L; nY <= nEndY; nY++, nYDst++ ) + for( long nY = nStartY; nY <= nEndY; nY++ ) { long nTempY = rCtx.mpMapIY[ nY ]; long nTempFY = rCtx.mpMapFY[ nY ]; @@ -137,7 +167,7 @@ void scalePalleteGeneral(ScaleContext &rCtx, long nStartY, long nEndY) BitmapColor aColRes( MAP( cR0, cR1, nTempFY ), MAP( cG0, cG1, nTempFY ), MAP( cB0, cB1, nTempFY ) ); - rCtx.mpDest->SetPixel( nYDst, nXDst++, aColRes ); + rCtx.mpDest->SetPixel( nY, nXDst++, aColRes ); } } } @@ -146,7 +176,7 @@ void scale24bitBGR(ScaleContext &rCtx, long nStartY, long nEndY) { const long nStartX = 0, nEndX = rCtx.mnDestW - 1L; - for( long nY = nStartY, nYDst = 0L; nY <= nEndY; nY++, nYDst++ ) + for( long nY = nStartY; nY <= nEndY; nY++ ) { long nTempY = rCtx.mpMapIY[ nY ]; long nTempFY = rCtx.mpMapFY[ nY ]; @@ -176,7 +206,7 @@ void scale24bitBGR(ScaleContext &rCtx, long nStartY, long nEndY) BitmapColor aColRes( MAP( cR0, cR1, nTempFY ), MAP( cG0, cG1, nTempFY ), MAP( cB0, cB1, nTempFY ) ); - rCtx.mpDest->SetPixel( nYDst, nXDst++, aColRes ); + rCtx.mpDest->SetPixel( nY, nXDst++, aColRes ); } } } @@ -185,7 +215,7 @@ void scale24bitRGB(ScaleContext &rCtx, long nStartY, long nEndY) { const long nStartX = 0, nEndX = rCtx.mnDestW - 1L; - for( long nY = nStartY, nYDst = 0L; nY <= nEndY; nY++, nYDst++ ) + for( long nY = nStartY; nY <= nEndY; nY++ ) { long nTempY = rCtx.mpMapIY[ nY ]; long nTempFY = rCtx.mpMapFY[ nY ]; @@ -215,7 +245,7 @@ void scale24bitRGB(ScaleContext &rCtx, long nStartY, long nEndY) BitmapColor aColRes( MAP( cR0, cR1, nTempFY ), MAP( cG0, cG1, nTempFY ), MAP( cB0, cB1, nTempFY ) ); - rCtx.mpDest->SetPixel( nYDst, nXDst++, aColRes ); + rCtx.mpDest->SetPixel( nY, nXDst++, aColRes ); } } } @@ -224,7 +254,7 @@ void scaleNonPalleteGeneral(ScaleContext &rCtx, long nStartY, long nEndY) { const long nStartX = 0, nEndX = rCtx.mnDestW - 1L; - for( long nY = nStartY, nYDst = 0L; nY <= nEndY; nY++, nYDst++ ) + for( long nY = nStartY; nY <= nEndY; nY++ ) { long nTempY = rCtx.mpMapIY[ nY ]; long nTempFY = rCtx.mpMapFY[ nY ]; @@ -249,7 +279,7 @@ void scaleNonPalleteGeneral(ScaleContext &rCtx, long nStartY, long nEndY) BitmapColor aColRes( MAP( cR0, cR1, nTempFY ), MAP( cG0, cG1, nTempFY ), MAP( cB0, cB1, nTempFY ) ); - rCtx.mpDest->SetPixel( nYDst, nXDst++, aColRes ); + rCtx.mpDest->SetPixel( nY, nXDst++, aColRes ); } } } @@ -259,7 +289,7 @@ void scalePallete8bit2(ScaleContext &rCtx, long nStartY, long nEndY) const long nStartX = 0, nEndX = rCtx.mnDestW - 1L; const long nMax = 1 << 7L; - for( long nY = nStartY , nYDst = 0L; nY <= nEndY; nY++, nYDst++ ) + for( long nY = nStartY; nY <= nEndY; nY++ ) { long nTop = rCtx.mbVMirr ? ( nY + 1 ) : nY; long nBottom = rCtx.mbVMirr ? nY : ( nY + 1 ) ; @@ -374,7 +404,7 @@ void scalePallete8bit2(ScaleContext &rCtx, long nStartY, long nEndY) } BitmapColor aColRes((sal_uInt8)nSumR, (sal_uInt8)nSumG, (sal_uInt8)nSumB); - rCtx.mpDest->SetPixel( nYDst, nXDst++, aColRes ); + rCtx.mpDest->SetPixel( nY, nXDst++, aColRes ); } } } @@ -384,7 +414,7 @@ void scalePalleteGeneral2(ScaleContext &rCtx, long nStartY, long nEndY) const long nStartX = 0, nEndX = rCtx.mnDestW - 1L; const long nMax = 1 << 7L; - for( long nY = nStartY , nYDst = 0L; nY <= nEndY; nY++, nYDst++ ) + for( long nY = nStartY; nY <= nEndY; nY++ ) { long nTop = rCtx.mbVMirr ? ( nY + 1 ) : nY; long nBottom = rCtx.mbVMirr ? nY : ( nY + 1 ) ; @@ -501,7 +531,7 @@ void scalePalleteGeneral2(ScaleContext &rCtx, long nStartY, long nEndY) } BitmapColor aColRes((sal_uInt8)nSumR, (sal_uInt8)nSumG, (sal_uInt8)nSumB); - rCtx.mpDest->SetPixel( nYDst, nXDst++, aColRes ); + rCtx.mpDest->SetPixel( nY, nXDst++, aColRes ); } } } @@ -511,7 +541,7 @@ void scale24bitBGR2(ScaleContext &rCtx, long nStartY, long nEndY) const long nStartX = 0, nEndX = rCtx.mnDestW - 1L; const long nMax = 1 << 7L; - for( long nY = nStartY , nYDst = 0L; nY <= nEndY; nY++, nYDst++ ) + for( long nY = nStartY; nY <= nEndY; nY++ ) { long nTop = rCtx.mbVMirr ? ( nY + 1 ) : nY; long nBottom = rCtx.mbVMirr ? nY : ( nY + 1 ) ; @@ -624,7 +654,7 @@ void scale24bitBGR2(ScaleContext &rCtx, long nStartY, long nEndY) nSumB /= nTotalWeightY; } BitmapColor aColRes((sal_uInt8)nSumR, (sal_uInt8)nSumG, (sal_uInt8)nSumB); - rCtx.mpDest->SetPixel( nYDst, nXDst++, aColRes ); + rCtx.mpDest->SetPixel( nY, nXDst++, aColRes ); } } } @@ -634,7 +664,7 @@ void scale24bitRGB2(ScaleContext &rCtx, long nStartY, long nEndY) const long nStartX = 0, nEndX = rCtx.mnDestW - 1L; const long nMax = 1 << 7L; - for( long nY = nStartY , nYDst = 0L; nY <= nEndY; nY++, nYDst++ ) + for( long nY = nStartY; nY <= nEndY; nY++ ) { long nTop = rCtx.mbVMirr ? ( nY + 1 ) : nY; long nBottom = rCtx.mbVMirr ? nY : ( nY + 1 ) ; @@ -745,7 +775,7 @@ void scale24bitRGB2(ScaleContext &rCtx, long nStartY, long nEndY) nSumB /= nTotalWeightY; } BitmapColor aColRes((sal_uInt8)nSumR, (sal_uInt8)nSumG, (sal_uInt8)nSumB); - rCtx.mpDest->SetPixel( nYDst, nXDst++, aColRes ); + rCtx.mpDest->SetPixel( nY, nXDst++, aColRes ); } } } @@ -755,7 +785,7 @@ void scaleNonPalleteGeneral2(ScaleContext &rCtx, long nStartY, long nEndY) const long nStartX = 0, nEndX = rCtx.mnDestW - 1L; const long nMax = 1 << 7L; - for( long nY = nStartY , nYDst = 0L; nY <= nEndY; nY++, nYDst++ ) + for( long nY = nStartY; nY <= nEndY; nY++ ) { long nTop = rCtx.mbVMirr ? ( nY + 1 ) : nY; long nBottom = rCtx.mbVMirr ? nY : ( nY + 1 ) ; @@ -871,7 +901,7 @@ void scaleNonPalleteGeneral2(ScaleContext &rCtx, long nStartY, long nEndY) } BitmapColor aColRes((sal_uInt8)nSumR, (sal_uInt8)nSumG, (sal_uInt8)nSumB); - rCtx.mpDest->SetPixel( nYDst, nXDst++, aColRes ); + rCtx.mpDest->SetPixel( nY, nXDst++, aColRes ); } } } @@ -916,6 +946,7 @@ bool BitmapScaleSuper::filter(Bitmap& rBitmap) if (pReadAccess && pWriteAccess) { + ScaleRangeFn pScaleRangeFn; ScaleContext aContext( pReadAccess.get(), pWriteAccess.get(), pReadAccess->Width(), @@ -923,7 +954,6 @@ bool BitmapScaleSuper::filter(Bitmap& rBitmap) pReadAccess->Height(), pWriteAccess->Height(), bVMirr, bHMirr ); - void (*scaleRangeFn)(ScaleContext &rCtx, long nStartY, long nEndY); bool bScaleUp = fScaleX >= fScaleThresh && fScaleY >= fScaleThresh; if( pReadAccess->HasPalette() ) @@ -931,10 +961,10 @@ bool BitmapScaleSuper::filter(Bitmap& rBitmap) switch( pReadAccess->GetScanlineFormat() ) { case BMP_FORMAT_8BIT_PAL: - scaleRangeFn = bScaleUp ? scalePallete8bit : scalePallete8bit2; + pScaleRangeFn = bScaleUp ? scalePallete8bit : scalePallete8bit2; break; default: - scaleRangeFn = bScaleUp ? scalePalleteGeneral + pScaleRangeFn = bScaleUp ? scalePalleteGeneral : scalePalleteGeneral2; break; } @@ -944,18 +974,63 @@ bool BitmapScaleSuper::filter(Bitmap& rBitmap) switch( pReadAccess->GetScanlineFormat() ) { case BMP_FORMAT_24BIT_TC_BGR: - scaleRangeFn = bScaleUp ? scale24bitBGR : scale24bitBGR2; + pScaleRangeFn = bScaleUp ? scale24bitBGR : scale24bitBGR2; break; case BMP_FORMAT_24BIT_TC_RGB: - scaleRangeFn = bScaleUp ? scale24bitRGB : scale24bitRGB2; + pScaleRangeFn = bScaleUp ? scale24bitRGB : scale24bitRGB2; break; default: - scaleRangeFn = bScaleUp ? scaleNonPalleteGeneral + pScaleRangeFn = bScaleUp ? scaleNonPalleteGeneral : scaleNonPalleteGeneral2; break; } } - scaleRangeFn( aContext, nStartY, nEndY ); + + // We want to thread - only if there is a lot of work to do: + // We work hard when there is a large destination image, or + // A large source image. + bool bHorizontalWork = pReadAccess->Width() > 512 || pWriteAccess->Width() > 512; + + static bool bDisableThreadedScaling = getenv ("VCL_NO_THREAD_SCALE"); + if ( bDisableThreadedScaling || !bHorizontalWork || + nEndY - nStartY < SCALE_THREAD_STRIP ) + { + SAL_INFO("vcl.gdi", "Scale in main thread"); + pScaleRangeFn( aContext, nStartY, nEndY ); + } + else + { + // partition and queue work + sal_uInt32 nThreads = std::max(std::thread::hardware_concurrency(), 1U); + sal_uInt32 nStrips = ((nEndY - nStartY) + SCALE_THREAD_STRIP - 1) / SCALE_THREAD_STRIP; + sal_uInt32 nStripsPerThread = nStrips / nThreads; + SAL_INFO("vcl.gdi", "Scale in " << nStrips << " strips " << nStripsPerThread << " per thread" << " we have " << nThreads << " CPU threads "); + long nStripY = nStartY; + std::vector<ScaleThread *> aThreads; + for ( sal_uInt32 t = 0; t < nThreads - 1; t++ ) + { + ScaleThread *pThread = new ScaleThread( pScaleRangeFn ); + for ( sal_uInt32 j = 0; j < nStripsPerThread; j++ ) + { + ScaleRangeContext aRC( aContext, nStripY ); + pThread->push( aRC ); + nStripY += SCALE_THREAD_STRIP; + } + pThread->create(); // set it running + aThreads.push_back( pThread ); + } + // finish any remaining bits here + pScaleRangeFn( aContext, nStripY, nEndY ); + + // join threads... + for ( std::vector<ScaleThread *>::iterator it = aThreads.begin(); + it != aThreads.end(); ++it ) + { + (*it)->join(); + delete *it; + } + SAL_INFO("vcl.gdi", "Joined all scaling threads"); + } bRet = true; } commit 36dc9e75ac092748dbf13d67f24e92e9b61507e8 Author: Michael Meeks <[email protected]> Date: Tue Oct 14 20:10:08 2014 -0300 vcl: re-factor scaling to use a single fn. pointer based invocation. Change-Id: Ide61808dbfa82ce67794150f44b6bac4f3c8e302 diff --git a/vcl/source/bitmap/bitmapscalesuper.cxx b/vcl/source/bitmap/bitmapscalesuper.cxx index e808562..29819c9 100644 --- a/vcl/source/bitmap/bitmapscalesuper.cxx +++ b/vcl/source/bitmap/bitmapscalesuper.cxx @@ -923,47 +923,39 @@ bool BitmapScaleSuper::filter(Bitmap& rBitmap) pReadAccess->Height(), pWriteAccess->Height(), bVMirr, bHMirr ); + void (*scaleRangeFn)(ScaleContext &rCtx, long nStartY, long nEndY); + + bool bScaleUp = fScaleX >= fScaleThresh && fScaleY >= fScaleThresh; if( pReadAccess->HasPalette() ) { - if( pReadAccess->GetScanlineFormat() == BMP_FORMAT_8BIT_PAL ) + switch( pReadAccess->GetScanlineFormat() ) { - if( fScaleX >= fScaleThresh && fScaleY >= fScaleThresh ) - scalePallete8bit(aContext, nStartY, nEndY); - else - scalePallete8bit2(aContext, nStartY, nEndY); - } - else - { - if( fScaleX >= fScaleThresh && fScaleY >= fScaleThresh ) - scalePalleteGeneral(aContext, nStartY, nEndY); - else - scalePalleteGeneral2(aContext, nStartY, nEndY); + case BMP_FORMAT_8BIT_PAL: + scaleRangeFn = bScaleUp ? scalePallete8bit : scalePallete8bit2; + break; + default: + scaleRangeFn = bScaleUp ? scalePalleteGeneral + : scalePalleteGeneral2; + break; } } else { - if( pReadAccess->GetScanlineFormat() == BMP_FORMAT_24BIT_TC_BGR ) - { - if( fScaleX >= fScaleThresh && fScaleY >= fScaleThresh ) - scale24bitBGR(aContext, nStartY, nEndY); - else - scale24bitBGR2(aContext, nStartY, nEndY); - } - else if( pReadAccess->GetScanlineFormat() == BMP_FORMAT_24BIT_TC_RGB ) - { - if( fScaleX >= fScaleThresh && fScaleY >= fScaleThresh ) - scale24bitRGB(aContext, nStartY, nEndY); - else - scale24bitRGB2(aContext, nStartY, nEndY); - } - else + switch( pReadAccess->GetScanlineFormat() ) { - if( fScaleX >= fScaleThresh && fScaleY >= fScaleThresh ) - scaleNonPalleteGeneral(aContext, nStartY, nEndY); - else - scaleNonPalleteGeneral2(aContext, nStartY, nEndY); + case BMP_FORMAT_24BIT_TC_BGR: + scaleRangeFn = bScaleUp ? scale24bitBGR : scale24bitBGR2; + break; + case BMP_FORMAT_24BIT_TC_RGB: + scaleRangeFn = bScaleUp ? scale24bitRGB : scale24bitRGB2; + break; + default: + scaleRangeFn = bScaleUp ? scaleNonPalleteGeneral + : scaleNonPalleteGeneral2; + break; } } + scaleRangeFn( aContext, nStartY, nEndY ); bRet = true; } commit ec17637a7b5906ab0f6b59505dc67515a8bf6ee6 Author: Michael Meeks <[email protected]> Date: Tue Oct 14 19:52:16 2014 -0300 vcl: Re-factor to use the ScaleContext to pass parameters. Change-Id: If4359a6b776b4a94a6934e9fd02ede475a0612a7 diff --git a/vcl/source/bitmap/bitmapscalesuper.cxx b/vcl/source/bitmap/bitmapscalesuper.cxx index dc5404c..e808562 100644 --- a/vcl/source/bitmap/bitmapscalesuper.cxx +++ b/vcl/source/bitmap/bitmapscalesuper.cxx @@ -43,8 +43,8 @@ void generateMap(long nW, long nDstW, bool bHMirr, long* pMapIX, long* pMapFX) } struct ScaleContext { - BitmapReadAccess *mpSrc; // was pAcc - BitmapWriteAccess *mpDest; // was pWAcc + BitmapReadAccess *mpSrc; + BitmapWriteAccess *mpDest; long mnSrcW, mnDestW; long mnSrcH, mnDestH; bool mbHMirr, mbVMirr; @@ -58,7 +58,7 @@ struct ScaleContext { long nSrcH, long nDestH, bool bHMirr, bool bVMirr) : mpSrc( pSrc ), mpDest( pDest ) - , mnSrcW( nSrcW ), mnDestW( nDestH ) + , mnSrcW( nSrcW ), mnDestW( nDestW ) , mnSrcH( nSrcH ), mnDestH( nDestH ) , mbHMirr( bHMirr ), mbVMirr( bVMirr ) , mpMapIX( new long[ nDestW ] ) @@ -71,34 +71,26 @@ struct ScaleContext { } }; -void scalePallete8bit(BitmapReadAccess* pAcc, BitmapWriteAccess* pWAcc, - long nStartX, long nEndX, long nStartY, long nEndY, - bool bVMirr, bool bHMirr) +void scalePallete8bit(ScaleContext &rCtx, long nStartY, long nEndY) { - boost::scoped_array<long> pMapIX(new long[pWAcc->Width()]); - boost::scoped_array<long> pMapIY(new long[pWAcc->Height()]); - boost::scoped_array<long> pMapFX(new long[pWAcc->Width()]); - boost::scoped_array<long> pMapFY(new long[pWAcc->Height()]); - - generateMap(pAcc->Width(), pWAcc->Width(), bHMirr, pMapIX.get(), pMapFX.get()); - generateMap(pAcc->Height(), pWAcc->Height(), bVMirr, pMapIY.get(), pMapFY.get()); + const long nStartX = 0, nEndX = rCtx.mnDestW - 1L; for( long nY = nStartY, nYDst = 0L; nY <= nEndY; nY++, nYDst++ ) { - long nTempY = pMapIY[ nY ]; - long nTempFY = pMapFY[ nY ]; - Scanline pLine0 = pAcc->GetScanline( nTempY ); - Scanline pLine1 = pAcc->GetScanline( ++nTempY ); + long nTempY = rCtx.mpMapIY[ nY ]; + long nTempFY = rCtx.mpMapFY[ nY ]; + Scanline pLine0 = rCtx.mpSrc->GetScanline( nTempY ); + Scanline pLine1 = rCtx.mpSrc->GetScanline( ++nTempY ); for(long nX = nStartX, nXDst = 0L; nX <= nEndX; nX++ ) { - long nTempX = pMapIX[ nX ]; - long nTempFX = pMapFX[ nX ]; + long nTempX = rCtx.mpMapIX[ nX ]; + long nTempFX = rCtx.mpMapFX[ nX ]; - const BitmapColor& rCol0 = pAcc->GetPaletteColor( pLine0[ nTempX ] ); - const BitmapColor& rCol2 = pAcc->GetPaletteColor( pLine1[ nTempX ] ); - const BitmapColor& rCol1 = pAcc->GetPaletteColor( pLine0[ ++nTempX ] ); - const BitmapColor& rCol3 = pAcc->GetPaletteColor( pLine1[ nTempX ] ); + const BitmapColor& rCol0 = rCtx.mpSrc->GetPaletteColor( pLine0[ nTempX ] ); + const BitmapColor& rCol2 = rCtx.mpSrc->GetPaletteColor( pLine1[ nTempX ] ); + const BitmapColor& rCol1 = rCtx.mpSrc->GetPaletteColor( pLine0[ ++nTempX ] ); + const BitmapColor& rCol3 = rCtx.mpSrc->GetPaletteColor( pLine1[ nTempX ] ); sal_uInt8 cR0 = MAP( rCol0.GetRed(), rCol1.GetRed(), nTempFX ); sal_uInt8 cG0 = MAP( rCol0.GetGreen(), rCol1.GetGreen(), nTempFX ); @@ -111,42 +103,33 @@ void scalePallete8bit(BitmapReadAccess* pAcc, BitmapWriteAccess* pWAcc, BitmapColor aColRes( MAP( cR0, cR1, nTempFY ), MAP( cG0, cG1, nTempFY ), MAP( cB0, cB1, nTempFY ) ); - pWAcc->SetPixel( nYDst, nXDst++, aColRes ); + rCtx.mpDest->SetPixel( nYDst, nXDst++, aColRes ); } } } -void scalePalleteGeneral(BitmapReadAccess* pAcc, BitmapWriteAccess* pWAcc, - long nStartX, long nEndX, long nStartY, long nEndY, - bool bVMirr, bool bHMirr) - +void scalePalleteGeneral(ScaleContext &rCtx, long nStartY, long nEndY) { - boost::scoped_array<long> pMapIX(new long[pWAcc->Width()]); - boost::scoped_array<long> pMapIY(new long[pWAcc->Height()]); - boost::scoped_array<long> pMapFX(new long[pWAcc->Width()]); - boost::scoped_array<long> pMapFY(new long[pWAcc->Height()]); - - generateMap(pAcc->Width(), pWAcc->Width(), bHMirr, pMapIX.get(), pMapFX.get()); - generateMap(pAcc->Height(), pWAcc->Height(), bVMirr, pMapIY.get(), pMapFY.get()); + const long nStartX = 0, nEndX = rCtx.mnDestW - 1L; for( long nY = nStartY, nYDst = 0L; nY <= nEndY; nY++, nYDst++ ) { - long nTempY = pMapIY[ nY ]; - long nTempFY = pMapFY[ nY ]; + long nTempY = rCtx.mpMapIY[ nY ]; + long nTempFY = rCtx.mpMapFY[ nY ]; for( long nX = nStartX, nXDst = 0L; nX <= nEndX; nX++ ) { - long nTempX = pMapIX[ nX ]; - long nTempFX = pMapFX[ nX ]; + long nTempX = rCtx.mpMapIX[ nX ]; + long nTempFX = rCtx.mpMapFX[ nX ]; - BitmapColor aCol0 = pAcc->GetPaletteColor( pAcc->GetPixelIndex( nTempY, nTempX ) ); - BitmapColor aCol1 = pAcc->GetPaletteColor( pAcc->GetPixelIndex( nTempY, ++nTempX ) ); + BitmapColor aCol0 = rCtx.mpSrc->GetPaletteColor( rCtx.mpSrc->GetPixelIndex( nTempY, nTempX ) ); + BitmapColor aCol1 = rCtx.mpSrc->GetPaletteColor( rCtx.mpSrc->GetPixelIndex( nTempY, ++nTempX ) ); sal_uInt8 cR0 = MAP( aCol0.GetRed(), aCol1.GetRed(), nTempFX ); sal_uInt8 cG0 = MAP( aCol0.GetGreen(), aCol1.GetGreen(), nTempFX ); sal_uInt8 cB0 = MAP( aCol0.GetBlue(), aCol1.GetBlue(), nTempFX ); - aCol1 = pAcc->GetPaletteColor( pAcc->GetPixelIndex( ++nTempY, nTempX ) ); - aCol0 = pAcc->GetPaletteColor( pAcc->GetPixelIndex( nTempY--, --nTempX ) ); + aCol1 = rCtx.mpSrc->GetPaletteColor( rCtx.mpSrc->GetPixelIndex( ++nTempY, nTempX ) ); + aCol0 = rCtx.mpSrc->GetPaletteColor( rCtx.mpSrc->GetPixelIndex( nTempY--, --nTempX ) ); sal_uInt8 cR1 = MAP( aCol0.GetRed(), aCol1.GetRed(), nTempFX ); sal_uInt8 cG1 = MAP( aCol0.GetGreen(), aCol1.GetGreen(), nTempFX ); sal_uInt8 cB1 = MAP( aCol0.GetBlue(), aCol1.GetBlue(), nTempFX ); @@ -154,34 +137,26 @@ void scalePalleteGeneral(BitmapReadAccess* pAcc, BitmapWriteAccess* pWAcc, BitmapColor aColRes( MAP( cR0, cR1, nTempFY ), MAP( cG0, cG1, nTempFY ), MAP( cB0, cB1, nTempFY ) ); - pWAcc->SetPixel( nYDst, nXDst++, aColRes ); + rCtx.mpDest->SetPixel( nYDst, nXDst++, aColRes ); } } } -void scale24bitBGR(BitmapReadAccess* pAcc, BitmapWriteAccess* pWAcc, - long nStartX, long nEndX, long nStartY, long nEndY, - bool bVMirr, bool bHMirr) +void scale24bitBGR(ScaleContext &rCtx, long nStartY, long nEndY) { - boost::scoped_array<long> pMapIX(new long[pWAcc->Width()]); - boost::scoped_array<long> pMapIY(new long[pWAcc->Height()]); - boost::scoped_array<long> pMapFX(new long[pWAcc->Width()]); - boost::scoped_array<long> pMapFY(new long[pWAcc->Height()]); - - generateMap(pAcc->Width(), pWAcc->Width(), bHMirr, pMapIX.get(), pMapFX.get()); - generateMap(pAcc->Height(), pWAcc->Height(), bVMirr, pMapIY.get(), pMapFY.get()); + const long nStartX = 0, nEndX = rCtx.mnDestW - 1L; for( long nY = nStartY, nYDst = 0L; nY <= nEndY; nY++, nYDst++ ) { - long nTempY = pMapIY[ nY ]; - long nTempFY = pMapFY[ nY ]; - Scanline pLine0 = pAcc->GetScanline( nTempY ); - Scanline pLine1 = pAcc->GetScanline( ++nTempY ); + long nTempY = rCtx.mpMapIY[ nY ]; + long nTempFY = rCtx.mpMapFY[ nY ]; + Scanline pLine0 = rCtx.mpSrc->GetScanline( nTempY ); + Scanline pLine1 = rCtx.mpSrc->GetScanline( ++nTempY ); for( long nX = nStartX, nXDst = 0L; nX <= nEndX; nX++ ) { - long nOff = 3L * pMapIX[ nX ]; - long nTempFX = pMapFX[ nX ]; + long nOff = 3L * rCtx.mpMapIX[ nX ]; + long nTempFX = rCtx.mpMapFX[ nX ]; Scanline pTmp0 = pLine0 + nOff ; Scanline pTmp1 = pTmp0 + 3L; @@ -201,34 +176,26 @@ void scale24bitBGR(BitmapReadAccess* pAcc, BitmapWriteAccess* pWAcc, BitmapColor aColRes( MAP( cR0, cR1, nTempFY ), MAP( cG0, cG1, nTempFY ), MAP( cB0, cB1, nTempFY ) ); - pWAcc->SetPixel( nYDst, nXDst++, aColRes ); + rCtx.mpDest->SetPixel( nYDst, nXDst++, aColRes ); } } } -void scale24bitRGB(BitmapReadAccess* pAcc, BitmapWriteAccess* pWAcc, - long nStartX, long nEndX, long nStartY, long nEndY, - bool bVMirr, bool bHMirr) +void scale24bitRGB(ScaleContext &rCtx, long nStartY, long nEndY) { - boost::scoped_array<long> pMapIX(new long[pWAcc->Width()]); - boost::scoped_array<long> pMapIY(new long[pWAcc->Height()]); - boost::scoped_array<long> pMapFX(new long[pWAcc->Width()]); - boost::scoped_array<long> pMapFY(new long[pWAcc->Height()]); - - generateMap(pAcc->Width(), pWAcc->Width(), bHMirr, pMapIX.get(), pMapFX.get()); - generateMap(pAcc->Height(), pWAcc->Height(), bVMirr, pMapIY.get(), pMapFY.get()); + const long nStartX = 0, nEndX = rCtx.mnDestW - 1L; for( long nY = nStartY, nYDst = 0L; nY <= nEndY; nY++, nYDst++ ) { - long nTempY = pMapIY[ nY ]; - long nTempFY = pMapFY[ nY ]; - Scanline pLine0 = pAcc->GetScanline( nTempY ); - Scanline pLine1 = pAcc->GetScanline( ++nTempY ); + long nTempY = rCtx.mpMapIY[ nY ]; + long nTempFY = rCtx.mpMapFY[ nY ]; + Scanline pLine0 = rCtx.mpSrc->GetScanline( nTempY ); + Scanline pLine1 = rCtx.mpSrc->GetScanline( ++nTempY ); for( long nX = nStartX, nXDst = 0L; nX <= nEndX; nX++ ) { - long nOff = 3L * pMapIX[ nX ]; - long nTempFX = pMapFX[ nX ]; + long nOff = 3L * rCtx.mpMapIX[ nX ]; + long nTempFX = rCtx.mpMapFX[ nX ]; Scanline pTmp0 = pLine0 + nOff; Scanline pTmp1 = pTmp0 + 3L; @@ -248,41 +215,33 @@ void scale24bitRGB(BitmapReadAccess* pAcc, BitmapWriteAccess* pWAcc, BitmapColor aColRes( MAP( cR0, cR1, nTempFY ), MAP( cG0, cG1, nTempFY ), MAP( cB0, cB1, nTempFY ) ); - pWAcc->SetPixel( nYDst, nXDst++, aColRes ); + rCtx.mpDest->SetPixel( nYDst, nXDst++, aColRes ); } } } -void scaleNonPalleteGeneral(BitmapReadAccess* pAcc, BitmapWriteAccess* pWAcc, - long nStartX, long nEndX, long nStartY, long nEndY, - bool bVMirr, bool bHMirr) +void scaleNonPalleteGeneral(ScaleContext &rCtx, long nStartY, long nEndY) { - boost::scoped_array<long> pMapIX(new long[pWAcc->Width()]); - boost::scoped_array<long> pMapIY(new long[pWAcc->Height()]); - boost::scoped_array<long> pMapFX(new long[pWAcc->Width()]); - boost::scoped_array<long> pMapFY(new long[pWAcc->Height()]); - - generateMap(pAcc->Width(), pWAcc->Width(), bHMirr, pMapIX.get(), pMapFX.get()); - generateMap(pAcc->Height(), pWAcc->Height(), bVMirr, pMapIY.get(), pMapFY.get()); + const long nStartX = 0, nEndX = rCtx.mnDestW - 1L; for( long nY = nStartY, nYDst = 0L; nY <= nEndY; nY++, nYDst++ ) { - long nTempY = pMapIY[ nY ]; - long nTempFY = pMapFY[ nY ]; + long nTempY = rCtx.mpMapIY[ nY ]; + long nTempFY = rCtx.mpMapFY[ nY ]; for( long nX = nStartX, nXDst = 0L; nX <= nEndX; nX++ ) { - long nTempX = pMapIX[ nX ]; - long nTempFX = pMapFX[ nX ]; + long nTempX = rCtx.mpMapIX[ nX ]; + long nTempFX = rCtx.mpMapFX[ nX ]; - BitmapColor aCol0 = pAcc->GetPixel( nTempY, nTempX ); - BitmapColor aCol1 = pAcc->GetPixel( nTempY, ++nTempX ); + BitmapColor aCol0 = rCtx.mpSrc->GetPixel( nTempY, nTempX ); + BitmapColor aCol1 = rCtx.mpSrc->GetPixel( nTempY, ++nTempX ); sal_uInt8 cR0 = MAP( aCol0.GetRed(), aCol1.GetRed(), nTempFX ); sal_uInt8 cG0 = MAP( aCol0.GetGreen(), aCol1.GetGreen(), nTempFX ); sal_uInt8 cB0 = MAP( aCol0.GetBlue(), aCol1.GetBlue(), nTempFX ); - aCol1 = pAcc->GetPixel( ++nTempY, nTempX ); - aCol0 = pAcc->GetPixel( nTempY--, --nTempX ); + aCol1 = rCtx.mpSrc->GetPixel( ++nTempY, nTempX ); + aCol0 = rCtx.mpSrc->GetPixel( nTempY--, --nTempX ); sal_uInt8 cR1 = MAP( aCol0.GetRed(), aCol1.GetRed(), nTempFX ); sal_uInt8 cG1 = MAP( aCol0.GetGreen(), aCol1.GetGreen(), nTempFX ); sal_uInt8 cB1 = MAP( aCol0.GetBlue(), aCol1.GetBlue(), nTempFX ); @@ -290,58 +249,49 @@ void scaleNonPalleteGeneral(BitmapReadAccess* pAcc, BitmapWriteAccess* pWAcc, BitmapColor aColRes( MAP( cR0, cR1, nTempFY ), MAP( cG0, cG1, nTempFY ), MAP( cB0, cB1, nTempFY ) ); - pWAcc->SetPixel( nYDst, nXDst++, aColRes ); + rCtx.mpDest->SetPixel( nYDst, nXDst++, aColRes ); } } } -void scalePallete8bit2(BitmapReadAccess* pAcc, BitmapWriteAccess* pWAcc, - long nStartX, long nEndX, long nStartY, long nEndY, - bool bVMirr, bool bHMirr) +void scalePallete8bit2(ScaleContext &rCtx, long nStartY, long nEndY) { - boost::scoped_array<long> pMapIX(new long[pWAcc->Width()]); - boost::scoped_array<long> pMapIY(new long[pWAcc->Height()]); - boost::scoped_array<long> pMapFX(new long[pWAcc->Width()]); - boost::scoped_array<long> pMapFY(new long[pWAcc->Height()]); - - generateMap(pAcc->Width(), pWAcc->Width(), bHMirr, pMapIX.get(), pMapFX.get()); - generateMap(pAcc->Height(), pWAcc->Height(), bVMirr, pMapIY.get(), pMapFY.get()); - + const long nStartX = 0, nEndX = rCtx.mnDestW - 1L; const long nMax = 1 << 7L; for( long nY = nStartY , nYDst = 0L; nY <= nEndY; nY++, nYDst++ ) { - long nTop = bVMirr ? ( nY + 1 ) : nY; - long nBottom = bVMirr ? nY : ( nY + 1 ) ; + long nTop = rCtx.mbVMirr ? ( nY + 1 ) : nY; + long nBottom = rCtx.mbVMirr ? nY : ( nY + 1 ) ; long nLineStart, nLineRange; if( nY == nEndY ) { - nLineStart = pMapIY[ nY ]; + nLineStart = rCtx.mpMapIY[ nY ]; nLineRange = 0; } else { - nLineStart = pMapIY[ nTop ] ; - nLineRange = ( pMapIY[ nBottom ] == pMapIY[ nTop ] ) ? 1 :( pMapIY[ nBottom ] - pMapIY[ nTop ] ); + nLineStart = rCtx.mpMapIY[ nTop ] ; + nLineRange = ( rCtx.mpMapIY[ nBottom ] == rCtx.mpMapIY[ nTop ] ) ? 1 :( rCtx.mpMapIY[ nBottom ] - rCtx.mpMapIY[ nTop ] ); } for( long nX = nStartX , nXDst = 0L; nX <= nEndX; nX++ ) { - long nLeft = bHMirr ? ( nX + 1 ) : nX; - long nRight = bHMirr ? nX : ( nX + 1 ) ; + long nLeft = rCtx.mbHMirr ? ( nX + 1 ) : nX; + long nRight = rCtx.mbHMirr ? nX : ( nX + 1 ) ; long nRowStart; long nRowRange; if( nX == nEndX ) { - nRowStart = pMapIX[ nX ]; + nRowStart = rCtx.mpMapIX[ nX ]; nRowRange = 0; } else { - nRowStart = pMapIX[ nLeft ]; - nRowRange = ( pMapIX[ nRight ] == pMapIX[ nLeft ] )? 1 : ( pMapIX[ nRight ] - pMapIX[ nLeft ] ); + nRowStart = rCtx.mpMapIX[ nLeft ]; + nRowRange = ( rCtx.mpMapIX[ nRight ] == rCtx.mpMapIX[ nLeft ] )? 1 : ( rCtx.mpMapIX[ nRight ] - rCtx.mpMapIX[ nLeft ] ); } long nSumR = 0; @@ -351,7 +301,7 @@ void scalePallete8bit2(BitmapReadAccess* pAcc, BitmapWriteAccess* pWAcc, for(int i = 0; i<= nLineRange; i++) { - Scanline pTmpY = pAcc->GetScanline( nLineStart + i ); + Scanline pTmpY = rCtx.mpSrc->GetScanline( nLineStart + i ); long nSumRowR = 0; long nSumRowG = 0; long nSumRowB = 0; @@ -359,7 +309,7 @@ void scalePallete8bit2(BitmapReadAccess* pAcc, BitmapWriteAccess* pWAcc, for(int j = 0; j <= nRowRange; j++) { - const BitmapColor& rCol = pAcc->GetPaletteColor( pTmpY[ nRowStart + j ] ); + const BitmapColor& rCol = rCtx.mpSrc->GetPaletteColor( pTmpY[ nRowStart + j ] ); if(nX == nEndX ) { @@ -370,7 +320,7 @@ void scalePallete8bit2(BitmapReadAccess* pAcc, BitmapWriteAccess* pWAcc, } else if( j == 0 ) { - long nWeightX = (nMax- pMapFX[ nLeft ]) ; + long nWeightX = (nMax- rCtx.mpMapFX[ nLeft ]) ; nSumRowB += ( nWeightX *rCol.GetBlue()) ; nSumRowG += ( nWeightX *rCol.GetGreen()) ; nSumRowR += ( nWeightX *rCol.GetRed()) ; @@ -378,7 +328,7 @@ void scalePallete8bit2(BitmapReadAccess* pAcc, BitmapWriteAccess* pWAcc, } else if ( nRowRange == j ) { - long nWeightX = pMapFX[ nRight ] ; + long nWeightX = rCtx.mpMapFX[ nRight ] ; nSumRowB += ( nWeightX *rCol.GetBlue() ); nSumRowG += ( nWeightX *rCol.GetGreen() ); nSumRowR += ( nWeightX *rCol.GetRed() ); @@ -397,11 +347,11 @@ void scalePallete8bit2(BitmapReadAccess* pAcc, BitmapWriteAccess* pWAcc, if( nY == nEndY ) nWeightY = nMax; else if( i == 0 ) - nWeightY = nMax - pMapFY[ nTop ]; + nWeightY = nMax - rCtx.mpMapFY[ nTop ]; else if( nLineRange == 1 ) - nWeightY = pMapFY[ nTop ]; + nWeightY = rCtx.mpMapFY[ nTop ]; else if ( nLineRange == i ) - nWeightY = pMapFY[ nBottom ]; + nWeightY = rCtx.mpMapFY[ nBottom ]; if (nTotalWeightX) { @@ -424,57 +374,48 @@ void scalePallete8bit2(BitmapReadAccess* pAcc, BitmapWriteAccess* pWAcc, } BitmapColor aColRes((sal_uInt8)nSumR, (sal_uInt8)nSumG, (sal_uInt8)nSumB); - pWAcc->SetPixel( nYDst, nXDst++, aColRes ); + rCtx.mpDest->SetPixel( nYDst, nXDst++, aColRes ); } } } -void scalePalleteGeneral2(BitmapReadAccess* pAcc, BitmapWriteAccess* pWAcc, - long nStartX, long nEndX, long nStartY, long nEndY, - bool bVMirr, bool bHMirr) +void scalePalleteGeneral2(ScaleContext &rCtx, long nStartY, long nEndY) { - boost::scoped_array<long> pMapIX(new long[pWAcc->Width()]); - boost::scoped_array<long> pMapIY(new long[pWAcc->Height()]); - boost::scoped_array<long> pMapFX(new long[pWAcc->Width()]); - boost::scoped_array<long> pMapFY(new long[pWAcc->Height()]); - - generateMap(pAcc->Width(), pWAcc->Width(), bHMirr, pMapIX.get(), pMapFX.get()); - generateMap(pAcc->Height(), pWAcc->Height(), bVMirr, pMapIY.get(), pMapFY.get()); - + const long nStartX = 0, nEndX = rCtx.mnDestW - 1L; const long nMax = 1 << 7L; for( long nY = nStartY , nYDst = 0L; nY <= nEndY; nY++, nYDst++ ) { - long nTop = bVMirr ? ( nY + 1 ) : nY; - long nBottom = bVMirr ? nY : ( nY + 1 ) ; + long nTop = rCtx.mbVMirr ? ( nY + 1 ) : nY; + long nBottom = rCtx.mbVMirr ? nY : ( nY + 1 ) ; long nLineStart, nLineRange; if( nY ==nEndY ) { - nLineStart = pMapIY[ nY ]; + nLineStart = rCtx.mpMapIY[ nY ]; nLineRange = 0; } else { - nLineStart = pMapIY[ nTop ] ; - nLineRange = ( pMapIY[ nBottom ] == pMapIY[ nTop ] ) ? 1 :( pMapIY[ nBottom ] - pMapIY[ nTop ] ); + nLineStart = rCtx.mpMapIY[ nTop ] ; + nLineRange = ( rCtx.mpMapIY[ nBottom ] == rCtx.mpMapIY[ nTop ] ) ? 1 :( rCtx.mpMapIY[ nBottom ] - rCtx.mpMapIY[ nTop ] ); } for( long nX = nStartX , nXDst = 0L; nX <= nEndX; nX++ ) { - long nLeft = bHMirr ? ( nX + 1 ) : nX; - long nRight = bHMirr ? nX : ( nX + 1 ) ; + long nLeft = rCtx.mbHMirr ? ( nX + 1 ) : nX; + long nRight = rCtx.mbHMirr ? nX : ( nX + 1 ) ; long nRowStart, nRowRange; if( nX == nEndX ) { - nRowStart = pMapIX[ nX ]; + nRowStart = rCtx.mpMapIX[ nX ]; nRowRange = 0; } else { - nRowStart = pMapIX[ nLeft ]; - nRowRange = ( pMapIX[ nRight ] == pMapIX[ nLeft ] )? 1 : ( pMapIX[ nRight ] - pMapIX[ nLeft ] ); + nRowStart = rCtx.mpMapIX[ nLeft ]; + nRowRange = ( rCtx.mpMapIX[ nRight ] == rCtx.mpMapIX[ nLeft ] )? 1 : ( rCtx.mpMapIX[ nRight ] - rCtx.mpMapIX[ nLeft ] ); } long nSumR = 0; @@ -491,7 +432,7 @@ void scalePalleteGeneral2(BitmapReadAccess* pAcc, BitmapWriteAccess* pWAcc, for(int j = 0; j <= nRowRange; j++) { - BitmapColor aCol0 = pAcc->GetPaletteColor ( pAcc->GetPixelIndex( nLineStart + i, nRowStart + j ) ); + BitmapColor aCol0 = rCtx.mpSrc->GetPaletteColor ( rCtx.mpSrc->GetPixelIndex( nLineStart + i, nRowStart + j ) ); if(nX == nEndX ) { @@ -504,7 +445,7 @@ void scalePalleteGeneral2(BitmapReadAccess* pAcc, BitmapWriteAccess* pWAcc, else if( j == 0 ) { - long nWeightX = (nMax- pMapFX[ nLeft ]) ; + long nWeightX = (nMax- rCtx.mpMapFX[ nLeft ]) ; nSumRowB += ( nWeightX *aCol0.GetBlue()) ; nSumRowG += ( nWeightX *aCol0.GetGreen()) ; nSumRowR += ( nWeightX *aCol0.GetRed()) ; @@ -513,7 +454,7 @@ void scalePalleteGeneral2(BitmapReadAccess* pAcc, BitmapWriteAccess* pWAcc, else if ( nRowRange == j ) { - long nWeightX = pMapFX[ nRight ] ; + long nWeightX = rCtx.mpMapFX[ nRight ] ; nSumRowB += ( nWeightX *aCol0.GetBlue() ); nSumRowG += ( nWeightX *aCol0.GetGreen() ); nSumRowR += ( nWeightX *aCol0.GetRed() ); @@ -533,11 +474,11 @@ void scalePalleteGeneral2(BitmapReadAccess* pAcc, BitmapWriteAccess* pWAcc, if( nY == nEndY ) nWeightY = nMax; else if( i == 0 ) - nWeightY = nMax - pMapFY[ nTop ]; + nWeightY = nMax - rCtx.mpMapFY[ nTop ]; else if( nLineRange == 1 ) - nWeightY = pMapFY[ nTop ]; + nWeightY = rCtx.mpMapFY[ nTop ]; else if ( nLineRange == i ) - nWeightY = pMapFY[ nBottom ]; + nWeightY = rCtx.mpMapFY[ nBottom ]; if (nTotalWeightX) { @@ -560,59 +501,50 @@ void scalePalleteGeneral2(BitmapReadAccess* pAcc, BitmapWriteAccess* pWAcc, } BitmapColor aColRes((sal_uInt8)nSumR, (sal_uInt8)nSumG, (sal_uInt8)nSumB); - pWAcc->SetPixel( nYDst, nXDst++, aColRes ); + rCtx.mpDest->SetPixel( nYDst, nXDst++, aColRes ); } } } -void scale24bitBGR2(BitmapReadAccess* pAcc, BitmapWriteAccess* pWAcc, - long nStartX, long nEndX, long nStartY, long nEndY, - bool bVMirr, bool bHMirr) +void scale24bitBGR2(ScaleContext &rCtx, long nStartY, long nEndY) { - boost::scoped_array<long> pMapIX(new long[pWAcc->Width()]); - boost::scoped_array<long> pMapIY(new long[pWAcc->Height()]); - boost::scoped_array<long> pMapFX(new long[pWAcc->Width()]); - boost::scoped_array<long> pMapFY(new long[pWAcc->Height()]); - - generateMap(pAcc->Width(), pWAcc->Width(), bHMirr, pMapIX.get(), pMapFX.get()); - generateMap(pAcc->Height(), pWAcc->Height(), bVMirr, pMapIY.get(), pMapFY.get()); - + const long nStartX = 0, nEndX = rCtx.mnDestW - 1L; const long nMax = 1 << 7L; for( long nY = nStartY , nYDst = 0L; nY <= nEndY; nY++, nYDst++ ) { - long nTop = bVMirr ? ( nY + 1 ) : nY; - long nBottom = bVMirr ? nY : ( nY + 1 ) ; + long nTop = rCtx.mbVMirr ? ( nY + 1 ) : nY; + long nBottom = rCtx.mbVMirr ? nY : ( nY + 1 ) ; long nLineStart; long nLineRange; if( nY ==nEndY ) { - nLineStart = pMapIY[ nY ]; + nLineStart = rCtx.mpMapIY[ nY ]; nLineRange = 0; } else { - nLineStart = pMapIY[ nTop ] ; - nLineRange = ( pMapIY[ nBottom ] == pMapIY[ nTop ] ) ? 1 :( pMapIY[ nBottom ] - pMapIY[ nTop ] ); + nLineStart = rCtx.mpMapIY[ nTop ] ; + nLineRange = ( rCtx.mpMapIY[ nBottom ] == rCtx.mpMapIY[ nTop ] ) ? 1 :( rCtx.mpMapIY[ nBottom ] - rCtx.mpMapIY[ nTop ] ); } for( long nX = nStartX , nXDst = 0L; nX <= nEndX; nX++ ) { - long nLeft = bHMirr ? ( nX + 1 ) : nX; - long nRight = bHMirr ? nX : ( nX + 1 ) ; + long nLeft = rCtx.mbHMirr ? ( nX + 1 ) : nX; + long nRight = rCtx.mbHMirr ? nX : ( nX + 1 ) ; long nRowStart; long nRowRange; if( nX == nEndX ) { - nRowStart = pMapIX[ nX ]; + nRowStart = rCtx.mpMapIX[ nX ]; nRowRange = 0; } else { - nRowStart = pMapIX[ nLeft ]; - nRowRange = ( pMapIX[ nRight ] == pMapIX[ nLeft ] )? 1 : ( pMapIX[ nRight ] - pMapIX[ nLeft ] ); + nRowStart = rCtx.mpMapIX[ nLeft ]; + nRowRange = ( rCtx.mpMapIX[ nRight ] == rCtx.mpMapIX[ nLeft ] )? 1 : ( rCtx.mpMapIX[ nRight ] - rCtx.mpMapIX[ nLeft ] ); } long nSumR = 0; @@ -622,7 +554,7 @@ void scale24bitBGR2(BitmapReadAccess* pAcc, BitmapWriteAccess* pWAcc, for(int i = 0; i<= nLineRange; i++) { - Scanline pTmpY = pAcc->GetScanline( nLineStart + i ); + Scanline pTmpY = rCtx.mpSrc->GetScanline( nLineStart + i ); Scanline pTmpX = pTmpY + 3L * nRowStart; long nSumRowR = 0; long nSumRowG = 0; @@ -640,7 +572,7 @@ void scale24bitBGR2(BitmapReadAccess* pAcc, BitmapWriteAccess* pWAcc, } else if( j == 0 ) { - long nWeightX = (nMax- pMapFX[ nLeft ]) ; + long nWeightX = (nMax- rCtx.mpMapFX[ nLeft ]) ; nSumRowB += ( nWeightX *( *pTmpX )) ;pTmpX++; nSumRowG += ( nWeightX *( *pTmpX )) ;pTmpX++; nSumRowR += ( nWeightX *( *pTmpX )) ;pTmpX++; @@ -648,7 +580,7 @@ void scale24bitBGR2(BitmapReadAccess* pAcc, BitmapWriteAccess* pWAcc, } else if ( nRowRange == j ) { - long nWeightX = pMapFX[ nRight ] ; + long nWeightX = rCtx.mpMapFX[ nRight ] ; nSumRowB += ( nWeightX *( *pTmpX ) );pTmpX++; nSumRowG += ( nWeightX *( *pTmpX ) );pTmpX++; nSumRowR += ( nWeightX *( *pTmpX ) );pTmpX++; @@ -667,11 +599,11 @@ void scale24bitBGR2(BitmapReadAccess* pAcc, BitmapWriteAccess* pWAcc, if( nY == nEndY ) nWeightY = nMax; else if( i == 0 ) - nWeightY = nMax - pMapFY[ nTop ]; + nWeightY = nMax - rCtx.mpMapFY[ nTop ]; else if( nLineRange == 1 ) - nWeightY = pMapFY[ nTop ]; + nWeightY = rCtx.mpMapFY[ nTop ]; else if ( nLineRange == i ) - nWeightY = pMapFY[ nBottom ]; + nWeightY = rCtx.mpMapFY[ nBottom ]; if (nTotalWeightX) { @@ -692,57 +624,48 @@ void scale24bitBGR2(BitmapReadAccess* pAcc, BitmapWriteAccess* pWAcc, nSumB /= nTotalWeightY; } BitmapColor aColRes((sal_uInt8)nSumR, (sal_uInt8)nSumG, (sal_uInt8)nSumB); - pWAcc->SetPixel( nYDst, nXDst++, aColRes ); + rCtx.mpDest->SetPixel( nYDst, nXDst++, aColRes ); } } } -void scale24bitRGB2(BitmapReadAccess* pAcc, BitmapWriteAccess* pWAcc, - long nStartX, long nEndX, long nStartY, long nEndY, - bool bVMirr, bool bHMirr) +void scale24bitRGB2(ScaleContext &rCtx, long nStartY, long nEndY) { - boost::scoped_array<long> pMapIX(new long[pWAcc->Width()]); - boost::scoped_array<long> pMapIY(new long[pWAcc->Height()]); - boost::scoped_array<long> pMapFX(new long[pWAcc->Width()]); - boost::scoped_array<long> pMapFY(new long[pWAcc->Height()]); - - generateMap(pAcc->Width(), pWAcc->Width(), bHMirr, pMapIX.get(), pMapFX.get()); - generateMap(pAcc->Height(), pWAcc->Height(), bVMirr, pMapIY.get(), pMapFY.get()); - + const long nStartX = 0, nEndX = rCtx.mnDestW - 1L; const long nMax = 1 << 7L; for( long nY = nStartY , nYDst = 0L; nY <= nEndY; nY++, nYDst++ ) { - long nTop = bVMirr ? ( nY + 1 ) : nY; - long nBottom = bVMirr ? nY : ( nY + 1 ) ; + long nTop = rCtx.mbVMirr ? ( nY + 1 ) : nY; + long nBottom = rCtx.mbVMirr ? nY : ( nY + 1 ) ; long nLineStart, nLineRange; if( nY ==nEndY ) { - nLineStart = pMapIY[ nY ]; + nLineStart = rCtx.mpMapIY[ nY ]; nLineRange = 0; } else { - nLineStart = pMapIY[ nTop ] ; - nLineRange = ( pMapIY[ nBottom ] == pMapIY[ nTop ] ) ? 1 :( pMapIY[ nBottom ] - pMapIY[ nTop ] ); + nLineStart = rCtx.mpMapIY[ nTop ] ; + nLineRange = ( rCtx.mpMapIY[ nBottom ] == rCtx.mpMapIY[ nTop ] ) ? 1 :( rCtx.mpMapIY[ nBottom ] - rCtx.mpMapIY[ nTop ] ); } for( long nX = nStartX , nXDst = 0L; nX <= nEndX; nX++ ) { - long nLeft = bHMirr ? ( nX + 1 ) : nX; - long nRight = bHMirr ? nX : ( nX + 1 ) ; + long nLeft = rCtx.mbHMirr ? ( nX + 1 ) : nX; + long nRight = rCtx.mbHMirr ? nX : ( nX + 1 ) ; long nRowStart, nRowRange; if( nX == nEndX ) { - nRowStart = pMapIX[ nX ]; + nRowStart = rCtx.mpMapIX[ nX ]; nRowRange = 0; } else { - nRowStart = pMapIX[ nLeft ]; - nRowRange = ( pMapIX[ nRight ] == pMapIX[ nLeft ] )? 1 : ( pMapIX[ nRight ] - pMapIX[ nLeft ] ); + nRowStart = rCtx.mpMapIX[ nLeft ]; + nRowRange = ( rCtx.mpMapIX[ nRight ] == rCtx.mpMapIX[ nLeft ] )? 1 : ( rCtx.mpMapIX[ nRight ] - rCtx.mpMapIX[ nLeft ] ); } long nSumR = 0; @@ -752,7 +675,7 @@ void scale24bitRGB2(BitmapReadAccess* pAcc, BitmapWriteAccess* pWAcc, for(int i = 0; i<= nLineRange; i++) { - Scanline pTmpY = pAcc->GetScanline( nLineStart + i ); + Scanline pTmpY = rCtx.mpSrc->GetScanline( nLineStart + i ); Scanline pTmpX = pTmpY + 3L * nRowStart; long nSumRowR = 0; long nSumRowG = 0; @@ -770,7 +693,7 @@ void scale24bitRGB2(BitmapReadAccess* pAcc, BitmapWriteAccess* pWAcc, } else if( j == 0 ) { - long nWeightX = (nMax- pMapFX[ nLeft ]) ; + long nWeightX = (nMax- rCtx.mpMapFX[ nLeft ]) ; nSumRowR += ( nWeightX *( *pTmpX )) ;pTmpX++; nSumRowG += ( nWeightX *( *pTmpX )) ;pTmpX++; nSumRowB += ( nWeightX *( *pTmpX )) ;pTmpX++; @@ -778,7 +701,7 @@ void scale24bitRGB2(BitmapReadAccess* pAcc, BitmapWriteAccess* pWAcc, } else if ( nRowRange == j ) { - long nWeightX = pMapFX[ nRight ] ; + long nWeightX = rCtx.mpMapFX[ nRight ] ; nSumRowR += ( nWeightX *( *pTmpX ) );pTmpX++; nSumRowG += ( nWeightX *( *pTmpX ) );pTmpX++; nSumRowB += ( nWeightX *( *pTmpX ) );pTmpX++; @@ -797,11 +720,11 @@ void scale24bitRGB2(BitmapReadAccess* pAcc, BitmapWriteAccess* pWAcc, if( nY == nEndY ) nWeightY = nMax; else if( i == 0 ) - nWeightY = nMax - pMapFY[ nTop ]; + nWeightY = nMax - rCtx.mpMapFY[ nTop ]; else if( nLineRange == 1 ) - nWeightY = pMapFY[ nTop ]; + nWeightY = rCtx.mpMapFY[ nTop ]; else if ( nLineRange == i ) - nWeightY = pMapFY[ nBottom ]; + nWeightY = rCtx.mpMapFY[ nBottom ]; if (nTotalWeightX) { @@ -822,57 +745,48 @@ void scale24bitRGB2(BitmapReadAccess* pAcc, BitmapWriteAccess* pWAcc, nSumB /= nTotalWeightY; } BitmapColor aColRes((sal_uInt8)nSumR, (sal_uInt8)nSumG, (sal_uInt8)nSumB); - pWAcc->SetPixel( nYDst, nXDst++, aColRes ); + rCtx.mpDest->SetPixel( nYDst, nXDst++, aColRes ); } } } -void scaleNonPalleteGeneral2(BitmapReadAccess* pAcc, BitmapWriteAccess* pWAcc, - long nStartX, long nEndX, long nStartY, long nEndY, - bool bVMirr, bool bHMirr) +void scaleNonPalleteGeneral2(ScaleContext &rCtx, long nStartY, long nEndY) { - boost::scoped_array<long> pMapIX(new long[pWAcc->Width()]); - boost::scoped_array<long> pMapIY(new long[pWAcc->Height()]); - boost::scoped_array<long> pMapFX(new long[pWAcc->Width()]); - boost::scoped_array<long> pMapFY(new long[pWAcc->Height()]); - - generateMap(pAcc->Width(), pWAcc->Width(), bHMirr, pMapIX.get(), pMapFX.get()); - generateMap(pAcc->Height(), pWAcc->Height(), bVMirr, pMapIY.get(), pMapFY.get()); - + const long nStartX = 0, nEndX = rCtx.mnDestW - 1L; const long nMax = 1 << 7L; for( long nY = nStartY , nYDst = 0L; nY <= nEndY; nY++, nYDst++ ) { - long nTop = bVMirr ? ( nY + 1 ) : nY; - long nBottom = bVMirr ? nY : ( nY + 1 ) ; + long nTop = rCtx.mbVMirr ? ( nY + 1 ) : nY; + long nBottom = rCtx.mbVMirr ? nY : ( nY + 1 ) ; long nLineStart, nLineRange; if( nY ==nEndY ) { - nLineStart = pMapIY[ nY ]; + nLineStart = rCtx.mpMapIY[ nY ]; nLineRange = 0; } else { - nLineStart = pMapIY[ nTop ] ; - nLineRange = ( pMapIY[ nBottom ] == pMapIY[ nTop ] ) ? 1 :( pMapIY[ nBottom ] - pMapIY[ nTop ] ); + nLineStart = rCtx.mpMapIY[ nTop ] ; + nLineRange = ( rCtx.mpMapIY[ nBottom ] == rCtx.mpMapIY[ nTop ] ) ? 1 :( rCtx.mpMapIY[ nBottom ] - rCtx.mpMapIY[ nTop ] ); } for( long nX = nStartX , nXDst = 0L; nX <= nEndX; nX++ ) { - long nLeft = bHMirr ? ( nX + 1 ) : nX; - long nRight = bHMirr ? nX : ( nX + 1 ) ; + long nLeft = rCtx.mbHMirr ? ( nX + 1 ) : nX; + long nRight = rCtx.mbHMirr ? nX : ( nX + 1 ) ; long nRowStart, nRowRange; if( nX == nEndX ) { - nRowStart = pMapIX[ nX ]; + nRowStart = rCtx.mpMapIX[ nX ]; nRowRange = 0; } else { - nRowStart = pMapIX[ nLeft ]; - nRowRange = ( pMapIX[ nRight ] == pMapIX[ nLeft ] )? 1 : ( pMapIX[ nRight ] - pMapIX[ nLeft ] ); + nRowStart = rCtx.mpMapIX[ nLeft ]; + nRowRange = ( rCtx.mpMapIX[ nRight ] == rCtx.mpMapIX[ nLeft ] )? 1 : ( rCtx.mpMapIX[ nRight ] - rCtx.mpMapIX[ nLeft ] ); } long nSumR = 0; @@ -889,7 +803,7 @@ void scaleNonPalleteGeneral2(BitmapReadAccess* pAcc, BitmapWriteAccess* pWAcc, for(int j = 0; j <= nRowRange; j++) { - BitmapColor aCol0 = pAcc->GetPixel( nLineStart + i, nRowStart + j ); + BitmapColor aCol0 = rCtx.mpSrc->GetPixel( nLineStart + i, nRowStart + j ); if(nX == nEndX ) { @@ -902,7 +816,7 @@ void scaleNonPalleteGeneral2(BitmapReadAccess* pAcc, BitmapWriteAccess* pWAcc, else if( j == 0 ) { - long nWeightX = (nMax- pMapFX[ nLeft ]) ; + long nWeightX = (nMax- rCtx.mpMapFX[ nLeft ]) ; nSumRowB += ( nWeightX *aCol0.GetBlue()) ; nSumRowG += ( nWeightX *aCol0.GetGreen()) ; nSumRowR += ( nWeightX *aCol0.GetRed()) ; @@ -911,7 +825,7 @@ void scaleNonPalleteGeneral2(BitmapReadAccess* pAcc, BitmapWriteAccess* pWAcc, else if ( nRowRange == j ) { - long nWeightX = pMapFX[ nRight ] ; + long nWeightX = rCtx.mpMapFX[ nRight ] ; nSumRowB += ( nWeightX *aCol0.GetBlue() ); nSumRowG += ( nWeightX *aCol0.GetGreen() ); nSumRowR += ( nWeightX *aCol0.GetRed() ); @@ -930,11 +844,11 @@ void scaleNonPalleteGeneral2(BitmapReadAccess* pAcc, BitmapWriteAccess* pWAcc, if( nY == nEndY ) nWeightY = nMax; else if( i == 0 ) - nWeightY = nMax - pMapFY[ nTop ]; + nWeightY = nMax - rCtx.mpMapFY[ nTop ]; else if( nLineRange == 1 ) - nWeightY = pMapFY[ nTop ]; + nWeightY = rCtx.mpMapFY[ nTop ]; else if ( nLineRange == i ) - nWeightY = pMapFY[ nBottom ]; + nWeightY = rCtx.mpMapFY[ nBottom ]; if (nTotalWeightX) { @@ -957,7 +871,7 @@ void scaleNonPalleteGeneral2(BitmapReadAccess* pAcc, BitmapWriteAccess* pWAcc, } BitmapColor aColRes((sal_uInt8)nSumR, (sal_uInt8)nSumG, (sal_uInt8)nSumB); - pWAcc->SetPixel( nYDst, nXDst++, aColRes ); + rCtx.mpDest->SetPixel( nYDst, nXDst++, aColRes ); } } } @@ -997,44 +911,33 @@ bool BitmapScaleSuper::filter(Bitmap& rBitmap) Bitmap aOutBmp(Size(nDstW, nDstH), 24); Bitmap::ScopedWriteAccess pWriteAccess(aOutBmp); - const long nStartX = 0; const long nStartY = 0; - const long nEndX = nDstW - 1L; - const long nEndY = nDstH - 1L; + const long nEndY = nDstH - 1L; if (pReadAccess && pWriteAccess) { + ScaleContext aContext( pReadAccess.get(), + pWriteAccess.get(), + pReadAccess->Width(), + pWriteAccess->Width(), + pReadAccess->Height(), + pWriteAccess->Height(), + bVMirr, bHMirr ); if( pReadAccess->HasPalette() ) { if( pReadAccess->GetScanlineFormat() == BMP_FORMAT_8BIT_PAL ) { if( fScaleX >= fScaleThresh && fScaleY >= fScaleThresh ) - { - scalePallete8bit(pReadAccess.get(), pWriteAccess.get(), - nStartX, nEndX, nStartY, nEndY, - bVMirr, bHMirr); - } + scalePallete8bit(aContext, nStartY, nEndY); else - { - scalePallete8bit2(pReadAccess.get(), pWriteAccess.get(), - nStartX, nEndX, nStartY, nEndY, - bVMirr, bHMirr); - } + scalePallete8bit2(aContext, nStartY, nEndY); } else { if( fScaleX >= fScaleThresh && fScaleY >= fScaleThresh ) - { - scalePalleteGeneral(pReadAccess.get(), pWriteAccess.get(), - nStartX, nEndX, nStartY, nEndY, - bVMirr, bHMirr); - } + scalePalleteGeneral(aContext, nStartY, nEndY); else - { - scalePalleteGeneral2(pReadAccess.get(), pWriteAccess.get(), - nStartX, nEndX, nStartY, nEndY, - bVMirr, bHMirr); - } + scalePalleteGeneral2(aContext, nStartY, nEndY); } } else @@ -1042,47 +945,23 @@ bool BitmapScaleSuper::filter(Bitmap& rBitmap) if( pReadAccess->GetScanlineFormat() == BMP_FORMAT_24BIT_TC_BGR ) { if( fScaleX >= fScaleThresh && fScaleY >= fScaleThresh ) - { - scale24bitBGR(pReadAccess.get(), pWriteAccess.get(), - nStartX, nEndX, nStartY, nEndY, - bVMirr, bHMirr); - } + scale24bitBGR(aContext, nStartY, nEndY); else - { - scale24bitBGR2(pReadAccess.get(), pWriteAccess.get(), - nStartX, nEndX, nStartY, nEndY, - bVMirr, bHMirr); - } + scale24bitBGR2(aContext, nStartY, nEndY); } else if( pReadAccess->GetScanlineFormat() == BMP_FORMAT_24BIT_TC_RGB ) { if( fScaleX >= fScaleThresh && fScaleY >= fScaleThresh ) - { - scale24bitRGB(pReadAccess.get(), pWriteAccess.get(), - nStartX, nEndX, nStartY, nEndY, - bVMirr, bHMirr); - } + scale24bitRGB(aContext, nStartY, nEndY); else - { - scale24bitRGB2(pReadAccess.get(), pWriteAccess.get(), - nStartX, nEndX, nStartY, nEndY, - bVMirr, bHMirr); - } + scale24bitRGB2(aContext, nStartY, nEndY); } else { if( fScaleX >= fScaleThresh && fScaleY >= fScaleThresh ) - { - scaleNonPalleteGeneral(pReadAccess.get(), pWriteAccess.get(), - nStartX, nEndX, nStartY, nEndY, - bVMirr, bHMirr); - } + scaleNonPalleteGeneral(aContext, nStartY, nEndY); else - { - scaleNonPalleteGeneral2(pReadAccess.get(), pWriteAccess.get(), - nStartX, nEndX, nStartY, nEndY, - bVMirr, bHMirr); - } + scaleNonPalleteGeneral2(aContext, nStartY, nEndY); } } commit 5f019b6790303ca595a310aa862260ef3a556a76 Author: Michael Meeks <[email protected]> Date: Tue Oct 14 19:16:21 2014 -0300 vcl: create a ScaleContext to share copy/paste Bitmap scaling code. Change-Id: I5a90b7c6065829d74c61b833f0551b8adc3f2711 diff --git a/vcl/source/bitmap/bitmapscalesuper.cxx b/vcl/source/bitmap/bitmapscalesuper.cxx index 070747b9..dc5404c 100644 --- a/vcl/source/bitmap/bitmapscalesuper.cxx +++ b/vcl/source/bitmap/bitmapscalesuper.cxx @@ -42,6 +42,35 @@ void generateMap(long nW, long nDstW, bool bHMirr, long* pMapIX, long* pMapFX) } } +struct ScaleContext { + BitmapReadAccess *mpSrc; // was pAcc + BitmapWriteAccess *mpDest; // was pWAcc + long mnSrcW, mnDestW; + long mnSrcH, mnDestH; + bool mbHMirr, mbVMirr; + boost::scoped_array<long> mpMapIX; + boost::scoped_array<long> mpMapIY; + boost::scoped_array<long> mpMapFX; + boost::scoped_array<long> mpMapFY; + ScaleContext( BitmapReadAccess *pSrc, + BitmapWriteAccess *pDest, + long nSrcW, long nDestW, + long nSrcH, long nDestH, + bool bHMirr, bool bVMirr) + : mpSrc( pSrc ), mpDest( pDest ) + , mnSrcW( nSrcW ), mnDestW( nDestH ) + , mnSrcH( nSrcH ), mnDestH( nDestH ) + , mbHMirr( bHMirr ), mbVMirr( bVMirr ) + , mpMapIX( new long[ nDestW ] ) + , mpMapIY( new long[ nDestH ] ) + , mpMapFX( new long[ nDestW ] ) + , mpMapFY( new long[ nDestH ] ) + { + generateMap(nSrcW, nDestW, bHMirr, mpMapIX.get(), mpMapFX.get()); + generateMap(nSrcH, nDestH, bVMirr, mpMapIY.get(), mpMapFY.get()); + } +}; + void scalePallete8bit(BitmapReadAccess* pAcc, BitmapWriteAccess* pWAcc, long nStartX, long nEndX, long nStartY, long nEndY, bool bVMirr, bool bHMirr) @@ -799,8 +828,8 @@ void scale24bitRGB2(BitmapReadAccess* pAcc, BitmapWriteAccess* pWAcc, } void scaleNonPalleteGeneral2(BitmapReadAccess* pAcc, BitmapWriteAccess* pWAcc, - long nStartX, long nEndX, long nStartY, long nEndY, - bool bVMirr, bool bHMirr) + long nStartX, long nEndX, long nStartY, long nEndY, + bool bVMirr, bool bHMirr) { boost::scoped_array<long> pMapIX(new long[pWAcc->Width()]); boost::scoped_array<long> pMapIY(new long[pWAcc->Height()]); commit 64eb9e2924b8649da9e831d81ee721714b81eb0d Author: Michael Meeks <[email protected]> Date: Tue Oct 14 19:04:12 2014 -0300 vcl: hide bitmap helpers in an anonymous namespace. Change-Id: I96ad50f538cfb6ecd256c4268feb81796a135b2b diff --git a/vcl/source/bitmap/bitmapscalesuper.cxx b/vcl/source/bitmap/bitmapscalesuper.cxx index cbfb08e..070747b9 100644 --- a/vcl/source/bitmap/bitmapscalesuper.cxx +++ b/vcl/source/bitmap/bitmapscalesuper.cxx @@ -22,6 +22,8 @@ #include <boost/scoped_array.hpp> +namespace { + #define MAP( cVal0, cVal1, nFrac ) ((sal_uInt8)((((long)(cVal0)<<7L)+nFrac*((long)(cVal1)-(cVal0)))>>7L)) void generateMap(long nW, long nDstW, bool bHMirr, long* pMapIX, long* pMapFX) @@ -176,8 +178,8 @@ void scale24bitBGR(BitmapReadAccess* pAcc, BitmapWriteAccess* pWAcc, } void scale24bitRGB(BitmapReadAccess* pAcc, BitmapWriteAccess* pWAcc, - long nStartX, long nEndX, long nStartY, long nEndY, - bool bVMirr, bool bHMirr) + long nStartX, long nEndX, long nStartY, long nEndY, + bool bVMirr, bool bHMirr) { boost::scoped_array<long> pMapIX(new long[pWAcc->Width()]); boost::scoped_array<long> pMapIY(new long[pWAcc->Height()]); @@ -931,6 +933,8 @@ void scaleNonPalleteGeneral2(BitmapReadAccess* pAcc, BitmapWriteAccess* pWAcc, } } +} // end anonymous namespace + BitmapScaleSuper::BitmapScaleSuper(const double& rScaleX, const double& rScaleY) : mrScaleX(rScaleX), mrScaleY(rScaleY) _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
