diff options
35 files changed, 349 insertions, 194 deletions
diff --git a/canvas/source/vcl/canvasbitmaphelper.cxx b/canvas/source/vcl/canvasbitmaphelper.cxx index bdb4444016fd..869957546498 100644 --- a/canvas/source/vcl/canvasbitmaphelper.cxx +++ b/canvas/source/vcl/canvasbitmaphelper.cxx @@ -156,6 +156,7 @@ namespace vclcanvas y<aBmpSize.Height() && y<rect.Y2; ++y ) { + Scanline pScanlineReadAlpha = pAlphaReadAccess->GetScanline( y ); if( pAlphaReadAccess.get() != nullptr ) { for( long x=rect.X1; @@ -165,7 +166,7 @@ namespace vclcanvas pRes[ nCurrPos++ ] = pReadAccess->GetColor( y, x ).GetRed(); pRes[ nCurrPos++ ] = pReadAccess->GetColor( y, x ).GetGreen(); pRes[ nCurrPos++ ] = pReadAccess->GetColor( y, x ).GetBlue(); - pRes[ nCurrPos++ ] = pAlphaReadAccess->GetPixel( y, x ).GetIndex(); + pRes[ nCurrPos++ ] = pAlphaReadAccess->GetIndexFromData( pScanlineReadAlpha, x ); } } else diff --git a/emfio/source/reader/mtftools.cxx b/emfio/source/reader/mtftools.cxx index 79f7efc90abd..efbfe52364f7 100644 --- a/emfio/source/reader/mtftools.cxx +++ b/emfio/source/reader/mtftools.cxx @@ -1666,17 +1666,22 @@ namespace emfio const long nWidth(std::min(pR->Width(), pW->Width())); const long nHeight(std::min(pR->Height(), pW->Height())); - for(long nY(0); nY < nHeight; nY++) for(long nX(0); nX < nWidth; nX++) + for(long nY(0); nY < nHeight; nY++) { - const sal_uInt8 nIndR(pR->GetPixelIndex(nY, nX)); - const sal_uInt8 nIndW(pW->GetPixelIndex(nY, nX)); + Scanline pScanlineR = pR->GetScanline( nY ); + Scanline pScanlineW = pW->GetScanline( nY ); + for(long nX(0); nX < nWidth; nX++) + { + const sal_uInt8 nIndR(pR->GetIndexFromData(pScanlineR, nX)); + const sal_uInt8 nIndW(pW->GetIndexFromData(pScanlineW, nX)); - // these values represent transparency (0 == no, 255 == fully transparent), - // so to blend these we have to multiply the inverse (opacity) - // and re-invert the result to transparence - const sal_uInt8 nCombined(0x00ff - (((0x00ff - nIndR) * (0x00ff - nIndW)) >> 8)); + // these values represent transparency (0 == no, 255 == fully transparent), + // so to blend these we have to multiply the inverse (opacity) + // and re-invert the result to transparence + const sal_uInt8 nCombined(0x00ff - (((0x00ff - nIndR) * (0x00ff - nIndW)) >> 8)); - pW->SetPixelIndex(nY, nX, nCombined); + pW->SetPixelOnData(pScanlineW, nX, BitmapColor(nCombined)); + } } } diff --git a/filter/source/flash/swfwriter1.cxx b/filter/source/flash/swfwriter1.cxx index 908faffb1f9f..7f82c97e8491 100644 --- a/filter/source/flash/swfwriter1.cxx +++ b/filter/source/flash/swfwriter1.cxx @@ -733,9 +733,10 @@ void getBitmapData( const BitmapEx& aBmpEx, sal_uInt8*& tgadata, sal_uInt8*& tga { for( sal_uInt32 nY = 0; nY < nHeight; nY++ ) { + Scanline pScanlineAA = pAAcc->GetScanline( nY ); for( sal_uInt32 nX = 0; nX < nWidth; nX++ ) { - const sal_uInt8 nAlpha = pAAcc->GetPixel( nY, nX ).GetIndex(); + const sal_uInt8 nAlpha = pAAcc->GetIndexFromData( pScanlineAA, nX ); const BitmapColor aPixelColor( pRAcc->GetColor( nY, nX ) ); if( nAlpha == 0xff ) diff --git a/filter/source/graphicfilter/egif/egif.cxx b/filter/source/graphicfilter/egif/egif.cxx index a34632d9061f..17c78bec69f7 100644 --- a/filter/source/graphicfilter/egif/egif.cxx +++ b/filter/source/graphicfilter/egif/egif.cxx @@ -506,8 +506,9 @@ void GIFWriter::WriteAccess() aCompressor.Compress( m_pAcc->GetScanline( nY ), nWidth ); else { + Scanline pScanline = m_pAcc->GetScanline( nY ); for( long nX = 0; nX < nWidth; nX++ ) - pBuffer[ nX ] = m_pAcc->GetPixelIndex( nY, nX ); + pBuffer[ nX ] = m_pAcc->GetIndexFromData( pScanline, nX ); aCompressor.Compress( pBuffer.get(), nWidth ); } diff --git a/filter/source/graphicfilter/eps/eps.cxx b/filter/source/graphicfilter/eps/eps.cxx index 4afe1f137e5f..01aa15a71dc2 100644 --- a/filter/source/graphicfilter/eps/eps.cxx +++ b/filter/source/graphicfilter/eps/eps.cxx @@ -497,6 +497,7 @@ void PSWriter::ImplWriteProlog( const Graphic* pPreview ) { nCount2 = 0; char nVal = 0; + Scanline pScanline = pAcc->GetScanline( nY ); for ( long nX = 0; nX < aSizeBitmap.Width(); nX++ ) { if ( !nCount2 ) @@ -506,7 +507,7 @@ void PSWriter::ImplWriteProlog( const Graphic* pPreview ) nCount2 = 312; } nVal <<= 1; - if ( pAcc->GetPixel( nY, nX ) == aBlack ) + if ( pAcc->GetPixelFromData( pScanline, nX ) == aBlack ) nVal |= 1; if ( ! ( --nCount ) ) { @@ -1756,9 +1757,10 @@ void PSWriter::ImplBmp( Bitmap const * pBitmap, Bitmap const * pMaskBitmap, cons ImplWriteLine( "image" ); for ( long y = 0; y < nHeight; y++ ) { + Scanline pScanlineRead = pAcc->GetScanline( y ); for ( long x = 0; x < nWidth; x++ ) { - ImplWriteHexByte( pAcc->GetPixelIndex( y, x ) ); + ImplWriteHexByte( pAcc->GetIndexFromData( pScanlineRead, x ) ); } } mpPS->WriteUChar( 10 ); @@ -1794,9 +1796,10 @@ void PSWriter::ImplBmp( Bitmap const * pBitmap, Bitmap const * pMaskBitmap, cons StartCompression(); for ( long y = 0; y < nHeight; y++ ) { + Scanline pScanlineRead = pAcc->GetScanline( y ); for ( long x = 0; x < nWidth; x++ ) { - Compress( pAcc->GetPixelIndex( y, x ) ); + Compress( pAcc->GetIndexFromData( pScanlineRead, x ) ); } } EndCompression(); @@ -1805,9 +1808,10 @@ void PSWriter::ImplBmp( Bitmap const * pBitmap, Bitmap const * pMaskBitmap, cons { for ( long y = 0; y < nHeight; y++ ) { + Scanline pScanlineRead = pAcc->GetScanline( y ); for ( long x = 0; x < nWidth; x++ ) { - ImplWriteHexByte( pAcc->GetPixelIndex( y, x ) ); + ImplWriteHexByte( pAcc->GetIndexFromData( pScanlineRead, x ) ); } } } @@ -1857,9 +1861,10 @@ void PSWriter::ImplBmp( Bitmap const * pBitmap, Bitmap const * pMaskBitmap, cons StartCompression(); for ( long y = 0; y < nHeight; y++ ) { + Scanline pScanlineRead = pAcc->GetScanline( y ); for ( long x = 0; x < nWidth; x++ ) { - Compress( pAcc->GetPixelIndex( y, x ) ); + Compress( pAcc->GetIndexFromData( pScanlineRead, x ) ); } } EndCompression(); @@ -1868,9 +1873,10 @@ void PSWriter::ImplBmp( Bitmap const * pBitmap, Bitmap const * pMaskBitmap, cons { for ( long y = 0; y < nHeight; y++ ) { + Scanline pScanlineRead = pAcc->GetScanline( y ); for ( long x = 0; x < nWidth; x++ ) { - ImplWriteHexByte( pAcc->GetPixelIndex( y, x ) ); + ImplWriteHexByte( pAcc->GetIndexFromData( pScanlineRead, x ) ); } } } @@ -1904,9 +1910,10 @@ void PSWriter::ImplBmp( Bitmap const * pBitmap, Bitmap const * pMaskBitmap, cons StartCompression(); for ( long y = 0; y < nHeight; y++ ) { + Scanline pScanlineRead = pAcc->GetScanline( y ); for ( long x = 0; x < nWidth; x++ ) { - const BitmapColor aBitmapColor( pAcc->GetPixel( y, x ) ); + const BitmapColor aBitmapColor( pAcc->GetPixelFromData( pScanlineRead, x ) ); Compress( aBitmapColor.GetRed() ); Compress( aBitmapColor.GetGreen() ); Compress( aBitmapColor.GetBlue() ); @@ -1918,9 +1925,10 @@ void PSWriter::ImplBmp( Bitmap const * pBitmap, Bitmap const * pMaskBitmap, cons { for ( long y = 0; y < nHeight; y++ ) { + Scanline pScanline = pAcc->GetScanline( y ); for ( long x = 0; x < nWidth; x++ ) { - const BitmapColor aBitmapColor( pAcc->GetPixel( y, x ) ); + const BitmapColor aBitmapColor( pAcc->GetPixelFromData( pScanline, x ) ); ImplWriteHexByte( aBitmapColor.GetRed() ); ImplWriteHexByte( aBitmapColor.GetGreen() ); ImplWriteHexByte( aBitmapColor.GetBlue() ); diff --git a/filter/source/graphicfilter/etiff/etiff.cxx b/filter/source/graphicfilter/etiff/etiff.cxx index 6b21e39b90a7..07d0fca42cd1 100644 --- a/filter/source/graphicfilter/etiff/etiff.cxx +++ b/filter/source/graphicfilter/etiff/etiff.cxx @@ -356,9 +356,10 @@ void TIFFWriter::ImplWriteBody() for ( y = 0; y < mnHeight; y++, mnCurAllPictHeight++ ) { ImplCallback( 100 * mnCurAllPictHeight / mnSumOfAllPictHeight ); + Scanline pScanline = mpAcc->GetScanline( y ); for ( x = 0; x < mnWidth; x++ ) { - const BitmapColor& rColor = mpAcc->GetPixel( y, x ); + const BitmapColor& rColor = mpAcc->GetPixelFromData( pScanline, x ); Compress( rColor.GetRed() ); Compress( rColor.GetGreen() ); Compress( rColor.GetBlue() ); @@ -372,9 +373,10 @@ void TIFFWriter::ImplWriteBody() for ( y = 0; y < mnHeight; y++, mnCurAllPictHeight++ ) { ImplCallback( 100 * mnCurAllPictHeight / mnSumOfAllPictHeight ); + Scanline pScanline = mpAcc->GetScanline( y ); for ( x = 0; x < mnWidth; x++ ) { - Compress( mpAcc->GetPixelIndex( y, x ) ); + Compress( mpAcc->GetIndexFromData( pScanline, x ) ); } } } @@ -385,12 +387,13 @@ void TIFFWriter::ImplWriteBody() for ( nShift = 0, y = 0; y < mnHeight; y++, mnCurAllPictHeight++ ) { ImplCallback( 100 * mnCurAllPictHeight / mnSumOfAllPictHeight ); + Scanline pScanline = mpAcc->GetScanline( y ); for ( x = 0; x < mnWidth; x++, nShift++ ) { if (!( nShift & 1 )) - nTemp = ( mpAcc->GetPixelIndex( y, x ) << 4 ); + nTemp = ( mpAcc->GetIndexFromData( pScanline, x ) << 4 ); else - Compress( static_cast<sal_uInt8>( nTemp | ( mpAcc->GetPixelIndex( y, x ) & 0xf ) ) ); + Compress( static_cast<sal_uInt8>( nTemp | ( mpAcc->GetIndexFromData( pScanline, x ) & 0xf ) ) ); } if ( nShift & 1 ) Compress( nTemp ); @@ -404,10 +407,11 @@ void TIFFWriter::ImplWriteBody() for ( y = 0; y < mnHeight; y++, mnCurAllPictHeight++ ) { ImplCallback( 100 * mnCurAllPictHeight / mnSumOfAllPictHeight ); + Scanline pScanline = mpAcc->GetScanline( y ); for ( x = 0; x < mnWidth; x++) { j <<= 1; - j |= ( ( ~mpAcc->GetPixelIndex( y, x ) ) & 1 ); + j |= ( ( ~mpAcc->GetIndexFromData( pScanline, x ) ) & 1 ); if ( j & 0x100 ) { Compress( static_cast<sal_uInt8>(j) ); diff --git a/filter/source/graphicfilter/ipsd/ipsd.cxx b/filter/source/graphicfilter/ipsd/ipsd.cxx index f8f53ccfaf1f..3d484621596e 100644 --- a/filter/source/graphicfilter/ipsd/ipsd.cxx +++ b/filter/source/graphicfilter/ipsd/ipsd.cxx @@ -673,11 +673,12 @@ bool PSDReader::ImplReadBody() for ( nY = 0; nY < mpFileHeader->nRows; nY++ ) { Scanline pScanline = mpWriteAcc->GetScanline( nY ); + Scanline pScanlineRead = mpReadAcc->GetScanline( nY ); for ( nX = 0; nX < mpFileHeader->nColumns; nX++ ) { sal_Int32 nDAT = pBlack[ nX + nY * mpFileHeader->nColumns ] * ( nBlackMax - 256 ) / 0x1ff; - aBitmapColor = mpReadAcc->GetPixel( nY, nX ); + aBitmapColor = mpReadAcc->GetPixelFromData( pScanlineRead, nX ); sal_uInt8 cR = static_cast<sal_uInt8>(MinMax( aBitmapColor.GetRed() - nDAT, 0L, 255L )); sal_uInt8 cG = static_cast<sal_uInt8>(MinMax( aBitmapColor.GetGreen() - nDAT, 0L, 255L )); sal_uInt8 cB = static_cast<sal_uInt8>(MinMax( aBitmapColor.GetBlue() - nDAT, 0L, 255L )); diff --git a/filter/source/msfilter/msdffimp.cxx b/filter/source/msfilter/msdffimp.cxx index 04864986d674..ffd6cfda2ef0 100644 --- a/filter/source/msfilter/msdffimp.cxx +++ b/filter/source/msfilter/msdffimp.cxx @@ -1378,13 +1378,14 @@ void DffPropertyReader::ApplyFillAttributes( SvStream& rIn, SfxItemSet& rSet, co for (long y = 0; y < pWrite->Height(); ++y) { Scanline pScanline = pWrite->GetScanline(y); + Scanline pScanlineRead = pRead->GetScanline( y ); for (long x = 0; x < pWrite->Width(); ++x) { Color aReadColor; if (pRead->HasPalette()) - aReadColor = pRead->GetPaletteColor(pRead->GetPixelIndex(y, x)).GetColor(); + aReadColor = pRead->GetPaletteColor(pRead->GetIndexFromData(pScanlineRead, x)).GetColor(); else - aReadColor = pRead->GetPixel(y, x).GetColor(); + aReadColor = pRead->GetPixelFromData(pScanlineRead, x).GetColor(); if (aReadColor.GetColor() == 0) pWrite->SetPixelOnData(pScanline, x, aCol2); diff --git a/filter/source/msfilter/svdfppt.cxx b/filter/source/msfilter/svdfppt.cxx index 3e03e069c161..892576367cc2 100644 --- a/filter/source/msfilter/svdfppt.cxx +++ b/filter/source/msfilter/svdfppt.cxx @@ -5686,9 +5686,10 @@ void PPTPortionObj::ApplyTo( SfxItemSet& rSet, SdrPowerPointImport& rManager, T { for( long nY = 0; nY < nHeight; nY++ ) { + Scanline pScanline = pAcc->GetScanline( nY ); for( long nX = 0; nX < nWidth; nX++ ) { - const BitmapColor& rCol = pAcc->GetPaletteColor( pAcc->GetPixelIndex( nY, nX ) ); + const BitmapColor& rCol = pAcc->GetPaletteColor( pAcc->GetIndexFromData( pScanline, nX ) ); nRt+=rCol.GetRed(); nGn+=rCol.GetGreen(); nBl+=rCol.GetBlue(); } } @@ -5697,9 +5698,10 @@ void PPTPortionObj::ApplyTo( SfxItemSet& rSet, SdrPowerPointImport& rManager, T { for( long nY = 0; nY < nHeight; nY++ ) { + Scanline pScanline = pAcc->GetScanline( nY ); for( long nX = 0; nX < nWidth; nX++ ) { - const BitmapColor aCol( pAcc->GetPixel( nY, nX ) ); + const BitmapColor aCol( pAcc->GetPixelFromData( pScanline, nX ) ); nRt+=aCol.GetRed(); nGn+=aCol.GetGreen(); nBl+=aCol.GetBlue(); } } diff --git a/forms/source/component/imgprod.cxx b/forms/source/component/imgprod.cxx index 44cb05d36715..40bfe13b78bb 100644 --- a/forms/source/component/imgprod.cxx +++ b/forms/source/component/imgprod.cxx @@ -437,13 +437,15 @@ void ImageProducer::ImplUpdateConsumer( const Graphic& rGraphic ) for( long nY = nStartY; nY <= nEndY; nY++ ) { + Scanline pScanlineMask = pMskAcc->GetScanline( nY ); + Scanline pScanline = pBmpAcc->GetScanline( nY ); for( long nX = nStartX; nX <= nEndX; nX++ ) { - if( pMskAcc->GetPixel( nY, nX ) == aWhite ) + if( pMskAcc->GetPixelFromData( pScanlineMask, nX ) == aWhite ) *pTmp++ = sal::static_int_cast< sal_Int8 >( mnTransIndex ); else - *pTmp++ = pBmpAcc->GetPixel( nY, nX ).GetIndex(); + *pTmp++ = pBmpAcc->GetPixelFromData( pScanline, nX ).GetIndex(); } } @@ -458,12 +460,14 @@ void ImageProducer::ImplUpdateConsumer( const Graphic& rGraphic ) for( long nY = nStartY; nY <= nEndY; nY++ ) { + Scanline pScanlineMask = pMskAcc->GetScanline( nY ); + Scanline pScanline = pBmpAcc->GetScanline( nY ); for( long nX = nStartX; nX <= nEndX; nX++ ) { - if( pMskAcc->GetPixel( nY, nX ) == aWhite ) + if( pMskAcc->GetPixelFromData( pScanlineMask, nX ) == aWhite ) *pTmp++ = mnTransIndex; else - *pTmp++ = pBmpAcc->GetPixel( nY, nX ).GetIndex(); + *pTmp++ = pBmpAcc->GetPixelFromData( pScanline, nX ).GetIndex(); } } @@ -480,15 +484,17 @@ void ImageProducer::ImplUpdateConsumer( const Graphic& rGraphic ) for( long nY = nStartY; nY <= nEndY; nY++ ) { + Scanline pScanlineMask = pMskAcc->GetScanline( nY ); + Scanline pScanline = pBmpAcc->GetScanline( nY ); for( long nX = nStartX; nX <= nEndX; nX++, pTmp++ ) { - const BitmapColor aCol( pBmpAcc->GetPixel( nY, nX ) ); + const BitmapColor aCol( pBmpAcc->GetPixelFromData( pScanline, nX ) ); *pTmp = static_cast<sal_Int32>(aCol.GetRed()) << 24; *pTmp |= static_cast<sal_Int32>(aCol.GetGreen()) << 16; *pTmp |= static_cast<sal_Int32>(aCol.GetBlue()) << 8; - if( pMskAcc->GetPixel( nY, nX ) != aWhite ) + if( pMskAcc->GetPixelFromData( pScanlineMask, nX ) != aWhite ) *pTmp |= 0x000000ffUL; } } diff --git a/include/vcl/bitmapaccess.hxx b/include/vcl/bitmapaccess.hxx index 5ae64f8193cc..37eaef6dcda9 100644 --- a/include/vcl/bitmapaccess.hxx +++ b/include/vcl/bitmapaccess.hxx @@ -189,6 +189,11 @@ public: return mFncGetPixel( pData, nX, maColorMask ); } + sal_uInt8 GetIndexFromData(const sal_uInt8* pData, long nX) const + { + return GetPixelFromData( pData, nX ).GetIndex(); + } + void SetPixelOnData(sal_uInt8* pData, long nX, const BitmapColor& rBitmapColor) { assert(pData && "Access is not valid!"); diff --git a/sc/source/filter/excel/xeescher.cxx b/sc/source/filter/excel/xeescher.cxx index 93f9bb047cf9..1e51b864bb70 100644 --- a/sc/source/filter/excel/xeescher.cxx +++ b/sc/source/filter/excel/xeescher.cxx @@ -428,9 +428,10 @@ void XclExpImgData::Save( XclExpStream& rStrm ) for( sal_Int32 nY = nHeight - 1; nY >= 0; --nY ) { + Scanline pScanline = pAccess->GetScanline( nY ); for( sal_Int32 nX = 0; nX < nWidth; ++nX ) { - const BitmapColor& rBmpColor = pAccess->GetPixel( nY, nX ); + const BitmapColor& rBmpColor = pAccess->GetPixelFromData( pScanline, nX ); rStrm << rBmpColor.GetBlue() << rBmpColor.GetGreen() << rBmpColor.GetRed(); } rStrm.WriteZeroBytes( nPadding ); diff --git a/sd/qa/unit/import-tests.cxx b/sd/qa/unit/import-tests.cxx index 9549076902e4..c54989eff192 100644 --- a/sd/qa/unit/import-tests.cxx +++ b/sd/qa/unit/import-tests.cxx @@ -1856,9 +1856,10 @@ bool checkPatternValues(std::vector<sal_uInt8>& rExpected, Bitmap& rBitmap) Bitmap::ScopedReadAccess pAccess(rBitmap); for (long y = 0; y < pAccess->Height(); ++y) { + Scanline pScanline = pAccess->GetScanline( y ); for (long x = 0; x < pAccess->Width(); ++x) { - Color aColor = pAccess->GetPixel(y, x).GetColor(); + Color aColor = pAccess->GetPixelFromData(pScanline, x).GetColor(); sal_uInt8 aValue = rExpected[y*8+x]; if (aValue == 1 && aColor != aFGColor) diff --git a/svtools/source/graphic/grfmgr2.cxx b/svtools/source/graphic/grfmgr2.cxx index 3c3c29b776ba..451365cd7270 100644 --- a/svtools/source/graphic/grfmgr2.cxx +++ b/svtools/source/graphic/grfmgr2.cxx @@ -588,12 +588,13 @@ bool ImplCreateRotatedScaled( const BitmapEx& rBmpEx, const GraphicAttr& rAttrib for (int yIn = yStart; yIn <= yEnd; yIn++) { + Scanline pScanlineRead = pReadAccess->GetScanline( yIn ); for (int xIn = xStart; xIn <= xEnd; xIn++) { if( pReadAccess->HasPalette() ) - aColor = pReadAccess->GetPaletteColor( pReadAccess->GetPixelIndex( yIn, xIn ) ); + aColor = pReadAccess->GetPaletteColor( pReadAccess->GetIndexFromData( pScanlineRead, xIn ) ); else - aColor = pReadAccess->GetPixel( yIn, xIn ); + aColor = pReadAccess->GetPixelFromData( pScanlineRead, xIn ); aSumRed += aColor.GetRed(); aSumGreen += aColor.GetGreen(); @@ -725,9 +726,10 @@ bool ImplCreateRotatedScaled( const BitmapEx& rBmpEx, const GraphicAttr& rAttrib for (int yIn = yStart; yIn <= yEnd; yIn++) { + Scanline pScanlineRead = pReadAccess->GetScanline( yIn ); for (int xIn = xStart; xIn <= xEnd; xIn++) { - aSum += pReadAccess->GetPixel( yIn, xIn ).GetIndex(); + aSum += pReadAccess->GetPixelFromData( pScanlineRead, xIn ).GetIndex(); aCount++; } } @@ -1495,7 +1497,7 @@ void GraphicManager::ImplAdjust( BitmapEx& rBmpEx, const GraphicAttr& rAttr, Gra Scanline pScanline = pA->GetScanline( nY ); for( long nX = 0; nX < nWidth; nX++ ) { - nNewTrans = nTrans + pA->GetPixel( nY, nX ).GetIndex(); + nNewTrans = nTrans + pA->GetIndexFromData( pScanline, nX ); aAlphaValue.SetIndex( static_cast<sal_uInt8>( ( nNewTrans & 0xffffff00 ) ? 255 : nNewTrans ) ); pA->SetPixelOnData( pScanline, nX, aAlphaValue ); } diff --git a/svtools/source/graphic/transformer.cxx b/svtools/source/graphic/transformer.cxx index ead61881da39..17fb3a3f87c6 100644 --- a/svtools/source/graphic/transformer.cxx +++ b/svtools/source/graphic/transformer.cxx @@ -55,9 +55,10 @@ void setAlpha( Bitmap& rBitmap, AlphaMask& rAlpha, sal_uInt8 cIndexFrom, sal_Int for ( long nY = 0; nY < pReadAccess->Height(); nY++ ) { Scanline pScanline = pWriteAccess->GetScanline( nY ); + Scanline pScanlineRead = pReadAccess->GetScanline( nY ); for ( long nX = 0; nX < pReadAccess->Width(); nX++ ) { - const sal_uInt8 cIndex = pReadAccess->GetPixelIndex( nY, nX ); + const sal_uInt8 cIndex = pReadAccess->GetIndexFromData( pScanlineRead, nX ); if ( cIndex == cIndexFrom ) pWriteAccess->SetPixelOnData( pScanline, nX, BitmapColor(nAlphaTo) ); } diff --git a/svx/source/svdraw/svdfmtf.cxx b/svx/source/svdraw/svdfmtf.cxx index 28fbb9635725..9197c1f7eea4 100644 --- a/svx/source/svdraw/svdfmtf.cxx +++ b/svx/source/svdraw/svdfmtf.cxx @@ -1588,7 +1588,7 @@ void ImpSdrGDIMetaFileImport::DoAction(MetaFloatTransparentAction const & rAct) Scanline pScanline = pOld->GetScanline( y ); for(long x(0); x < pOld->Width(); x++) { - const double fOpOld(1.0 - (pOld->GetPixel(y, x).GetIndex() * fFactor)); + const double fOpOld(1.0 - (pOld->GetIndexFromData(pScanline, x) * fFactor)); const sal_uInt8 aCol(basegfx::fround((1.0 - (fOpOld * fOpNew)) * 255.0)); pOld->SetPixelOnData(pScanline, x, BitmapColor(aCol)); @@ -1608,8 +1608,8 @@ void ImpSdrGDIMetaFileImport::DoAction(MetaFloatTransparentAction const & rAct) Scanline pScanline = pOld->GetScanline( y ); for(long x(0); x < pOld->Width(); x++) { - const double fOpOld(1.0 - (pOld->GetPixel(y, x).GetIndex() * fFactor)); - const double fOpNew(1.0 - (pNew->GetPixel(y, x).GetIndex() * fFactor)); + const double fOpOld(1.0 - (pOld->GetIndexFromData(pScanline, x) * fFactor)); + const double fOpNew(1.0 - (pNew->GetIndexFromData(pScanline, x) * fFactor)); const sal_uInt8 aCol(basegfx::fround((1.0 - (fOpOld * fOpNew)) * 255.0)); pOld->SetPixelOnData(pScanline, x, BitmapColor(aCol)); diff --git a/svx/source/xoutdev/_xoutbmp.cxx b/svx/source/xoutdev/_xoutbmp.cxx index 0dae5e1992d8..f1d4458ef517 100644 --- a/svx/source/xoutdev/_xoutbmp.cxx +++ b/svx/source/xoutdev/_xoutbmp.cxx @@ -480,22 +480,25 @@ Bitmap XOutBitmap::DetectEdges( const Bitmap& rBmp, const sal_uInt8 cThreshold ) for( long nY = 0, nY1 = 1, nY2 = 2; nY < nHeight2; nY++, nY1++, nY2++ ) { Scanline pScanline = pWriteAcc->GetScanline( nY1 ); + Scanline pScanlineRead = pReadAcc->GetScanline( nY ); + Scanline pScanlineRead1 = pReadAcc->GetScanline( nY1 ); + Scanline pScanlineRead2 = pReadAcc->GetScanline( nY2 ); for( long nX = 0, nXDst = 1, nXTmp; nX < nWidth2; nX++, nXDst++ ) { nXTmp = nX; - nSum1 = -( nSum2 = lGray = pReadAcc->GetPixelIndex( nY, nXTmp++ ) ); - nSum2 += static_cast<long>(pReadAcc->GetPixelIndex( nY, nXTmp++ )) << 1; - nSum1 += ( lGray = pReadAcc->GetPixelIndex( nY, nXTmp ) ); + nSum1 = -( nSum2 = lGray = pReadAcc->GetIndexFromData( pScanlineRead, nXTmp++ ) ); + nSum2 += static_cast<long>(pReadAcc->GetIndexFromData( pScanlineRead, nXTmp++ )) << 1; + nSum1 += ( lGray = pReadAcc->GetIndexFromData( pScanlineRead, nXTmp ) ); nSum2 += lGray; - nSum1 += static_cast<long>(pReadAcc->GetPixelIndex( nY1, nXTmp )) << 1; - nSum1 -= static_cast<long>(pReadAcc->GetPixelIndex( nY1, nXTmp -= 2 )) << 1; + nSum1 += static_cast<long>(pReadAcc->GetIndexFromData( pScanlineRead1, nXTmp )) << 1; + nSum1 -= static_cast<long>(pReadAcc->GetIndexFromData( pScanlineRead1, nXTmp -= 2 )) << 1; - nSum1 += ( lGray = -static_cast<long>(pReadAcc->GetPixelIndex( nY2, nXTmp++ )) ); + nSum1 += ( lGray = -static_cast<long>(pReadAcc->GetIndexFromData( pScanlineRead2, nXTmp++ )) ); nSum2 += lGray; - nSum2 -= static_cast<long>(pReadAcc->GetPixelIndex( nY2, nXTmp++ )) << 1; - nSum1 += ( lGray = static_cast<long>(pReadAcc->GetPixelIndex( nY2, nXTmp )) ); + nSum2 -= static_cast<long>(pReadAcc->GetIndexFromData( pScanlineRead2, nXTmp++ )) << 1; + nSum1 += ( lGray = static_cast<long>(pReadAcc->GetIndexFromData( pScanlineRead2, nXTmp )) ); nSum2 -= lGray; if( ( nSum1 * nSum1 + nSum2 * nSum2 ) < lThres2 ) @@ -583,7 +586,8 @@ tools::Polygon XOutBitmap::GetContour( const Bitmap& rBmp, const XOutFlags nFlag // scan row from left to right while( nY < nEndY1 ) { - if( aBlack == pAcc->GetPixel( nY, nX ) ) + Scanline pScanline = pAcc->GetScanline( nY ); + if( aBlack == pAcc->GetPixelFromData( pScanline, nX ) ) { pPoints1[ nPolyPos ] = Point( nX, nY ); nY = nStartY2; @@ -591,7 +595,7 @@ tools::Polygon XOutBitmap::GetContour( const Bitmap& rBmp, const XOutFlags nFlag // this loop always breaks eventually as there is at least one pixel while( true ) { - if( aBlack == pAcc->GetPixel( nY, nX ) ) + if( aBlack == pAcc->GetPixelFromData( pScanline, nX ) ) { pPoints2[ nPolyPos ] = Point( nX, nY ); break; @@ -616,11 +620,12 @@ tools::Polygon XOutBitmap::GetContour( const Bitmap& rBmp, const XOutFlags nFlag for ( nY = nStartY1; nY < nEndY1; nY++ ) { nX = nStartX1; + Scanline pScanline = pAcc->GetScanline( nY ); // scan row from left to right while( nX < nEndX1 ) { - if( aBlack == pAcc->GetPixel( nY, nX ) ) + if( aBlack == pAcc->GetPixelFromData( pScanline, nX ) ) { pPoints1[ nPolyPos ] = Point( nX, nY ); nX = nStartX2; @@ -628,7 +633,7 @@ tools::Polygon XOutBitmap::GetContour( const Bitmap& rBmp, const XOutFlags nFlag // this loop always breaks eventually as there is at least one pixel while( true ) { - if( aBlack == pAcc->GetPixel( nY, nX ) ) + if( aBlack == pAcc->GetPixelFromData( pScanline, nX ) ) { pPoints2[ nPolyPos ] = Point( nX, nY ); break; diff --git a/vcl/source/bitmap/BitmapProcessor.cxx b/vcl/source/bitmap/BitmapProcessor.cxx index 470744fbab5c..378191ece8bd 100644 --- a/vcl/source/bitmap/BitmapProcessor.cxx +++ b/vcl/source/bitmap/BitmapProcessor.cxx @@ -28,11 +28,12 @@ BitmapEx BitmapProcessor::createLightImage(const BitmapEx& rBitmapEx) for (long nY = 0; nY < aSize.Height(); ++nY) { Scanline pScanline = pWrite->GetScanline( nY ); + Scanline pScanlineRead = pRead->GetScanline( nY ); for (long nX = 0; nX < aSize.Width(); ++nX) { BitmapColor aBmpColor = pRead->HasPalette() ? - pRead->GetPaletteColor(pRead->GetPixelIndex(nY, nX)) : - pRead->GetPixel(nY, nX); + pRead->GetPaletteColor(pRead->GetIndexFromData(pScanlineRead, nX)) : + pRead->GetPixelFromData(pScanlineRead, nX); basegfx::BColor aBColor(Color(aBmpColor.Invert().GetColor()).getBColor()); aBColor = basegfx::utils::rgb2hsl(aBColor); @@ -96,13 +97,14 @@ BitmapEx BitmapProcessor::createDisabledImage(const BitmapEx& rBitmapEx) { Scanline pScanAlpha = pGreyAlpha->GetScanline( nY ); Scanline pScanline = pGrey->GetScanline( nY ); + Scanline pScanReadAlpha = pReadAlpha->GetScanline( nY ); for (long nX = 0; nX < aSize.Width(); ++nX) { const sal_uInt8 nLum(pRead->GetLuminance(nY, nX)); BitmapColor aGreyValue(nLum, nLum, nLum); pGrey->SetPixelOnData(pScanline, nX, aGreyValue); - const BitmapColor aBitmapAlphaValue(pReadAlpha->GetPixel(nY, nX)); + const BitmapColor aBitmapAlphaValue(pReadAlpha->GetPixelFromData(pScanReadAlpha, nX)); aGreyAlphaValue.SetIndex(sal_uInt8(std::min(aBitmapAlphaValue.GetIndex() + 178ul, 255ul))); pGreyAlpha->SetPixelOnData(pScanAlpha, nX, aGreyAlphaValue); @@ -203,7 +205,7 @@ void BitmapProcessor::colorizeImage(BitmapEx const & rBitmapEx, Color aColor) Scanline pScanline = pWriteAccess->GetScanline( nY ); for (nX = 0; nX < nW; ++nX) { - aBitmapColor = pWriteAccess->GetPixel(nY, nX); + aBitmapColor = pWriteAccess->GetPixelFromData(pScanline, nX); aBitmapColor.SetRed(aMapR[aBitmapColor.GetRed()]); aBitmapColor.SetGreen(aMapG[aBitmapColor.GetGreen()]); aBitmapColor.SetBlue(aMapB[aBitmapColor.GetBlue()]); diff --git a/vcl/source/bitmap/BitmapScaleConvolution.cxx b/vcl/source/bitmap/BitmapScaleConvolution.cxx index fca8b2ed161c..cf5f22c9a9c4 100644 --- a/vcl/source/bitmap/BitmapScaleConvolution.cxx +++ b/vcl/source/bitmap/BitmapScaleConvolution.cxx @@ -116,6 +116,7 @@ bool ImplScaleConvolutionHor(Bitmap& rSource, Bitmap& rTarget, const double& rSc for(long y(0); y < nHeight; y++) { Scanline pScanline = pWriteAcc->GetScanline( y ); + Scanline pScanlineRead = pReadAcc->GetScanline( y ); for(long x(0); x < nNewWidth; x++) { const long aBaseIndex(x * aNumberOfContributions); @@ -134,11 +135,11 @@ bool ImplScaleConvolutionHor(Bitmap& rSource, Bitmap& rTarget, const double& rSc if(pReadAcc->HasPalette()) { - aColor = pReadAcc->GetPaletteColor(pReadAcc->GetPixelIndex(y, pPixels[aIndex])); + aColor = pReadAcc->GetPaletteColor(pReadAcc->GetIndexFromData(pScanlineRead, pPixels[aIndex])); } else { - aColor = pReadAcc->GetPixel(y, pPixels[aIndex]); + aColor = pReadAcc->GetPixelFromData(pScanlineRead, pPixels[aIndex]); } aValueRed += aWeight * aColor.GetRed(); diff --git a/vcl/source/bitmap/BitmapSymmetryCheck.cxx b/vcl/source/bitmap/BitmapSymmetryCheck.cxx index e5db09e463ca..9abb480864e2 100644 --- a/vcl/source/bitmap/BitmapSymmetryCheck.cxx +++ b/vcl/source/bitmap/BitmapSymmetryCheck.cxx @@ -35,17 +35,19 @@ bool BitmapSymmetryCheck::checkImpl(BitmapReadAccess const * pReadAccess) for (long y = 0; y < nHeightHalf; ++y) { + Scanline pScanlineRead = pReadAccess->GetScanline( y ); + Scanline pScanlineRead2 = pReadAccess->GetScanline( nHeight - y - 1 ); for (long x = 0; x < nWidthHalf; ++x) { - if (pReadAccess->GetPixel(y, x) != pReadAccess->GetPixel(nHeight - y - 1, x)) + if (pReadAccess->GetPixelFromData(pScanlineRead, x) != pReadAccess->GetPixelFromData(pScanlineRead2, x)) { return false; } - if (pReadAccess->GetPixel(y, x) != pReadAccess->GetPixel(y, nWidth - x - 1)) + if (pReadAccess->GetPixelFromData(pScanlineRead, x) != pReadAccess->GetPixelFromData(pScanlineRead, nWidth - x - 1)) { return false; } - if (pReadAccess->GetPixel(y, x) != pReadAccess->GetPixel(nHeight - y - 1, nWidth - x - 1)) + if (pReadAccess->GetPixelFromData(pScanlineRead, x) != pReadAccess->GetPixelFromData(pScanlineRead2, nWidth - x - 1)) { return false; } @@ -65,9 +67,10 @@ bool BitmapSymmetryCheck::checkImpl(BitmapReadAccess const * pReadAccess) if (bHeightEven) { + Scanline pScanlineRead = pReadAccess->GetScanline( nHeightHalf ); for (long x = 0; x < nWidthHalf; ++x) { - if (pReadAccess->GetPixel(nHeightHalf, x) != pReadAccess->GetPixel(nHeightHalf, nWidth - x - 1)) + if (pReadAccess->GetPixelFromData(pScanlineRead, x) != pReadAccess->GetPixelFromData(pScanlineRead, nWidth - x - 1)) { return false; } diff --git a/vcl/source/bitmap/bitmapscalesuper.cxx b/vcl/source/bitmap/bitmapscalesuper.cxx index 545e18903e84..7fae7a6a8dc0 100644 --- a/vcl/source/bitmap/bitmapscalesuper.cxx +++ b/vcl/source/bitmap/bitmapscalesuper.cxx @@ -465,9 +465,10 @@ void scalePalleteGeneral2(ScaleContext &rCtx, long nStartY, long nEndY) long nSumRowB = 0; long nTotalWeightX = 0; + Scanline pScanlineSrc = rCtx.mpSrc->GetScanline( nLineStart + i ); for(long j = 0; j <= nRowRange; j++) { - BitmapColor aCol0 = rCtx.mpSrc->GetPaletteColor ( rCtx.mpSrc->GetPixelIndex( nLineStart + i, nRowStart + j ) ); + BitmapColor aCol0 = rCtx.mpSrc->GetPaletteColor ( rCtx.mpSrc->GetIndexFromData( pScanlineSrc, nRowStart + j ) ); if(nX == nEndX ) { @@ -839,9 +840,10 @@ void scaleNonPalleteGeneral2(ScaleContext &rCtx, long nStartY, long nEndY) long nSumRowB = 0; long nTotalWeightX = 0; + Scanline pScanlineSrc = rCtx.mpSrc->GetScanline( nLineStart + i ); for(long j = 0; j <= nRowRange; j++) { - BitmapColor aCol0 = rCtx.mpSrc->GetPixel( nLineStart + i, nRowStart + j ); + BitmapColor aCol0 = rCtx.mpSrc->GetPixelFromData( pScanlineSrc, nRowStart + j ); if(nX == nEndX ) { diff --git a/vcl/source/filter/jpeg/JpegWriter.cxx b/vcl/source/filter/jpeg/JpegWriter.cxx index d5636c53d2ec..f6787145eabf 100644 --- a/vcl/source/filter/jpeg/JpegWriter.cxx +++ b/vcl/source/filter/jpeg/JpegWriter.cxx @@ -147,9 +147,10 @@ void* JPEGWriter::GetScanline( long nY ) if( mpReadAccess->HasPalette() ) { + Scanline pScanlineRead = mpReadAccess->GetScanline( nY ); for( long nX = 0; nX < nWidth; nX++ ) { - aColor = mpReadAccess->GetPaletteColor( mpReadAccess->GetPixelIndex( nY, nX ) ); + aColor = mpReadAccess->GetPaletteColor( mpReadAccess->GetIndexFromData( pScanlineRead, nX ) ); *pTmp++ = aColor.GetRed(); if ( !mbGreys ) { @@ -160,9 +161,10 @@ void* JPEGWriter::GetScanline( long nY ) } else { + Scanline pScanlineRead = mpReadAccess->GetScanline( nY ); for( long nX = 0; nX < nWidth; nX++ ) { - aColor = mpReadAccess->GetPixel( nY, nX ); + aColor = mpReadAccess->GetPixelFromData( pScanlineRead, nX ); *pTmp++ = aColor.GetRed(); if ( !mbGreys ) { @@ -207,10 +209,11 @@ bool JPEGWriter::Write( const Graphic& rGraphic ) for ( long nY = 0; bIsGrey && ( nY < mpReadAccess->Height() ); nY++ ) { BitmapColor aColor; + Scanline pScanlineRead = mpReadAccess->GetScanline( nY ); for( long nX = 0; bIsGrey && ( nX < nWidth ); nX++ ) { - aColor = mpReadAccess->HasPalette() ? mpReadAccess->GetPaletteColor( mpReadAccess->GetPixelIndex( nY, nX ) ) - : mpReadAccess->GetPixel( nY, nX ); + aColor = mpReadAccess->HasPalette() ? mpReadAccess->GetPaletteColor( mpReadAccess->GetIndexFromData( pScanlineRead, nX ) ) + : mpReadAccess->GetPixelFromData( pScanlineRead, nX ); bIsGrey = ( aColor.GetRed() == aColor.GetGreen() ) && ( aColor.GetRed() == aColor.GetBlue() ); } } diff --git a/vcl/source/gdi/alpha.cxx b/vcl/source/gdi/alpha.cxx index 49451eea22fa..59ca82c035ff 100644 --- a/vcl/source/gdi/alpha.cxx +++ b/vcl/source/gdi/alpha.cxx @@ -100,8 +100,9 @@ bool AlphaMask::Replace( const Bitmap& rMask, sal_uInt8 cReplaceTransparency ) for( long nY = 0; nY < nHeight; nY++ ) { Scanline pScanline = pAcc->GetScanline(nY); + Scanline pScanlineMask = pMaskAcc->GetScanline(nY); for( long nX = 0; nX < nWidth; nX++ ) - if( pMaskAcc->GetPixel( nY, nX ) == aMaskWhite ) + if( pMaskAcc->GetPixelFromData( pScanlineMask, nX ) == aMaskWhite ) pAcc->SetPixelOnData( pScanline, nX, aReplace ); } } @@ -138,7 +139,7 @@ void AlphaMask::Replace( sal_uInt8 cSearchTransparency, sal_uInt8 cReplaceTransp Scanline pScanline = pAcc->GetScanline(nY); for( long nX = 0; nX < nWidth; nX++ ) { - if( pAcc->GetPixel( nY, nX ).GetIndex() == cSearchTransparency ) + if( pAcc->GetIndexFromData( pScanline, nX ) == cSearchTransparency ) pAcc->SetPixelOnData( pScanline, nX, aReplace ); } } diff --git a/vcl/source/gdi/bitmap.cxx b/vcl/source/gdi/bitmap.cxx index 445ea36954a3..cd28ea2c0a23 100644 --- a/vcl/source/gdi/bitmap.cxx +++ b/vcl/source/gdi/bitmap.cxx @@ -478,9 +478,12 @@ bool Bitmap::Invert() const long nWidth = pAcc->Width(); const long nHeight = pAcc->Height(); - for( long nX = 0; nX < nWidth; nX++ ) - for( long nY = 0; nY < nHeight; nY++ ) - pAcc->SetPixel( nY, nX, pAcc->GetPixel( nY, nX ).Invert() ); + for( long nY = 0; nY < nHeight; nY++ ) + { + Scanline pScanline = pAcc->GetScanline(nY); + for( long nX = 0; nX < nWidth; nX++ ) + pAcc->SetPixelOnData( pScanline, nX, pAcc->GetPixelFromData( pScanline, nX ).Invert() ); + } } mxImpBmp->ImplInvalidateChecksum(); @@ -513,9 +516,9 @@ bool Bitmap::Mirror( BmpMirrorFlags nMirrorFlags ) Scanline pScanline = pAcc->GetScanline(nY); for( long nX = 0, nOther = nWidth1; nX < nWidth_2; nX++, nOther-- ) { - const BitmapColor aTemp( pAcc->GetPixel( nY, nX ) ); + const BitmapColor aTemp( pAcc->GetPixelFromData( pScanline, nX ) ); - pAcc->SetPixelOnData( pScanline, nX, pAcc->GetPixel( nY, nOther ) ); + pAcc->SetPixelOnData( pScanline, nX, pAcc->GetPixelFromData( pScanline, nOther ) ); pAcc->SetPixelOnData( pScanline, nOther, aTemp ); } } @@ -564,9 +567,9 @@ bool Bitmap::Mirror( BmpMirrorFlags nMirrorFlags ) Scanline pScanlineOther = pAcc->GetScanline(nOtherY); for( long nX = 0, nOtherX = nWidth1; nX < nWidth; nX++, nOtherX-- ) { - const BitmapColor aTemp( pAcc->GetPixel( nY, nX ) ); + const BitmapColor aTemp( pAcc->GetPixelFromData( pScanline, nX ) ); - pAcc->SetPixelOnData( pScanline, nX, pAcc->GetPixel( nOtherY, nOtherX ) ); + pAcc->SetPixelOnData( pScanline, nX, pAcc->GetPixelFromData( pScanlineOther, nOtherX ) ); pAcc->SetPixelOnData( pScanlineOther, nOtherX, aTemp ); } } @@ -577,8 +580,8 @@ bool Bitmap::Mirror( BmpMirrorFlags nMirrorFlags ) Scanline pScanline = pAcc->GetScanline(nHeight_2); for( long nX = 0, nOtherX = nWidth1, nWidth_2 = nWidth >> 1; nX < nWidth_2; nX++, nOtherX-- ) { - const BitmapColor aTemp( pAcc->GetPixel( nHeight_2, nX ) ); - pAcc->SetPixelOnData( pScanline, nX, pAcc->GetPixel( nHeight_2, nOtherX ) ); + const BitmapColor aTemp( pAcc->GetPixelFromData( pScanline, nX ) ); + pAcc->SetPixelOnData( pScanline, nX, pAcc->GetPixelFromData( pScanline, nOtherX ) ); pAcc->SetPixelOnData( pScanline, nOtherX, aTemp ); } } @@ -764,8 +767,9 @@ bool Bitmap::Crop( const tools::Rectangle& rRectPixel ) for( long nY = 0, nY2 = nOldY; nY < nNewHeight; nY++, nY2++ ) { Scanline pScanline = pWriteAcc->GetScanline(nY); + Scanline pScanlineRead = pReadAcc->GetScanline(nY2); for( long nX = 0, nX2 = nOldX; nX < nNewWidth; nX++, nX2++ ) - pWriteAcc->SetPixelOnData( pScanline, nX, pReadAcc->GetPixel( nY2, nX2 ) ); + pWriteAcc->SetPixelOnData( pScanline, nX, pReadAcc->GetPixelFromData( pScanlineRead, nX2 ) ); } pWriteAcc.reset(); @@ -881,8 +885,9 @@ bool Bitmap::CopyPixel( const tools::Rectangle& rRectDst, for( long nSrcY = aRectSrc.Top(); nSrcY < nSrcEndY; nSrcY++, nDstY++ ) { Scanline pScanline = pWriteAcc->GetScanline(nDstY); + Scanline pScanlineRead = pReadAcc->GetScanline(nSrcY); for( long nSrcX = aRectSrc.Left(), nDstX = aRectDst.Left(); nSrcX < nSrcEndX; nSrcX++, nDstX++ ) - pWriteAcc->SetPixelOnData( pScanline, nDstX, BitmapColor( pMap[ pReadAcc->GetPixelIndex( nSrcY, nSrcX ) ] )); + pWriteAcc->SetPixelOnData( pScanline, nDstX, BitmapColor( pMap[ pReadAcc->GetIndexFromData( pScanlineRead, nSrcX ) ] )); } } else if( pReadAcc->HasPalette() ) @@ -890,16 +895,18 @@ bool Bitmap::CopyPixel( const tools::Rectangle& rRectDst, for( long nSrcY = aRectSrc.Top(); nSrcY < nSrcEndY; nSrcY++, nDstY++ ) { Scanline pScanline = pWriteAcc->GetScanline(nDstY); + Scanline pScanlineRead = pReadAcc->GetScanline(nSrcY); for( long nSrcX = aRectSrc.Left(), nDstX = aRectDst.Left(); nSrcX < nSrcEndX; nSrcX++, nDstX++ ) - pWriteAcc->SetPixelOnData( pScanline, nDstX, pReadAcc->GetPaletteColor( pReadAcc->GetPixelIndex( nSrcY, nSrcX ) ) ); + pWriteAcc->SetPixelOnData( pScanline, nDstX, pReadAcc->GetPaletteColor( pReadAcc->GetIndexFromData( pScanlineRead, nSrcX ) ) ); } } else for( long nSrcY = aRectSrc.Top(); nSrcY < nSrcEndY; nSrcY++, nDstY++ ) { Scanline pScanline = pWriteAcc->GetScanline(nDstY); + Scanline pScanlineRead = pReadAcc->GetScanline(nSrcY); for( long nSrcX = aRectSrc.Left(), nDstX = aRectDst.Left(); nSrcX < nSrcEndX; nSrcX++, nDstX++ ) - pWriteAcc->SetPixelOnData( pScanline, nDstX, pReadAcc->GetPixel( nSrcY, nSrcX ) ); + pWriteAcc->SetPixelOnData( pScanline, nDstX, pReadAcc->GetPixelFromData( pScanlineRead, nSrcX ) ); } pWriteAcc.reset(); @@ -938,8 +945,9 @@ bool Bitmap::CopyPixel( const tools::Rectangle& rRectDst, for( long nY = nSrcY, nYN = nDstY; nY <= nSrcEndY1; nY++, nYN++ ) { Scanline pScanline = pWriteAcc->GetScanline(nYN); + Scanline pScanlineSrc = pWriteAcc->GetScanline(nY); for( long nX = nSrcX, nXN = nDstX; nX <= nSrcEndX1; nX++, nXN++ ) - pWriteAcc->SetPixelOnData( pScanline, nXN, pWriteAcc->GetPixel( nY, nX ) ); + pWriteAcc->SetPixelOnData( pScanline, nXN, pWriteAcc->GetPixelFromData( pScanlineSrc, nX ) ); } } else if( ( nDstX <= nSrcX ) && ( nDstY >= nSrcY ) ) @@ -947,8 +955,9 @@ bool Bitmap::CopyPixel( const tools::Rectangle& rRectDst, for( long nY = nSrcEndY1, nYN = nDstEndY1; nY >= nSrcY; nY--, nYN-- ) { Scanline pScanline = pWriteAcc->GetScanline(nYN); + Scanline pScanlineSrc = pWriteAcc->GetScanline(nY); for( long nX = nSrcX, nXN = nDstX; nX <= nSrcEndX1; nX++, nXN++ ) - pWriteAcc->SetPixelOnData( pScanline, nXN, pWriteAcc->GetPixel( nY, nX ) ); + pWriteAcc->SetPixelOnData( pScanline, nXN, pWriteAcc->GetPixelFromData( pScanlineSrc, nX ) ); } } else if( ( nDstX >= nSrcX ) && ( nDstY <= nSrcY ) ) @@ -956,8 +965,9 @@ bool Bitmap::CopyPixel( const tools::Rectangle& rRectDst, for( long nY = nSrcY, nYN = nDstY; nY <= nSrcEndY1; nY++, nYN++ ) { Scanline pScanline = pWriteAcc->GetScanline(nYN); + Scanline pScanlineSrc = pWriteAcc->GetScanline(nY); for( long nX = nSrcEndX1, nXN = nDstEndX1; nX >= nSrcX; nX--, nXN-- ) - pWriteAcc->SetPixelOnData( pScanline, nXN, pWriteAcc->GetPixel( nY, nX ) ); + pWriteAcc->SetPixelOnData( pScanline, nXN, pWriteAcc->GetPixelFromData( pScanlineSrc, nX ) ); } } else @@ -965,8 +975,9 @@ bool Bitmap::CopyPixel( const tools::Rectangle& rRectDst, for( long nY = nSrcEndY1, nYN = nDstEndY1; nY >= nSrcY; nY--, nYN-- ) { Scanline pScanline = pWriteAcc->GetScanline(nYN); + Scanline pScanlineSrc = pWriteAcc->GetScanline(nY); for( long nX = nSrcEndX1, nXN = nDstEndX1; nX >= nSrcX; nX--, nXN-- ) - pWriteAcc->SetPixelOnData( pScanline, nXN, pWriteAcc->GetPixel( nY, nX ) ); + pWriteAcc->SetPixelOnData( pScanline, nXN, pWriteAcc->GetPixelFromData( pScanlineSrc, nX ) ); } } @@ -1020,8 +1031,9 @@ bool Bitmap::CopyPixel_AlphaOptimized( const tools::Rectangle& rRectDst, const t for( long nSrcY = aRectSrc.Top(); nSrcY < nSrcEndY; nSrcY++, nDstY++) { Scanline pScanline = pWriteAcc->GetScanline(nDstY); + Scanline pScanlineRead = pReadAcc->GetScanline(nSrcY); for( long nSrcX = aRectSrc.Left(), nDstX = aRectDst.Left(); nSrcX < nSrcEndX; nSrcX++, nDstX++ ) - pWriteAcc->SetPixelOnData( pScanline, nDstX, pReadAcc->GetPixel( nSrcY, nSrcX ) ); + pWriteAcc->SetPixelOnData( pScanline, nDstX, pReadAcc->GetPixelFromData( pScanlineRead, nSrcX ) ); } pWriteAcc.reset(); @@ -1060,8 +1072,9 @@ bool Bitmap::CopyPixel_AlphaOptimized( const tools::Rectangle& rRectDst, const t for( long nY = nSrcY, nYN = nDstY; nY <= nSrcEndY1; nY++, nYN++ ) { Scanline pScanline = pWriteAcc->GetScanline(nYN); + Scanline pScanlineSrc = pWriteAcc->GetScanline(nY); for( long nX = nSrcX, nXN = nDstX; nX <= nSrcEndX1; nX++, nXN++ ) - pWriteAcc->SetPixelOnData( pScanline, nXN, pWriteAcc->GetPixel( nY, nX ) ); + pWriteAcc->SetPixelOnData( pScanline, nXN, pWriteAcc->GetPixelFromData( pScanlineSrc, nX ) ); } } else if( ( nDstX <= nSrcX ) && ( nDstY >= nSrcY ) ) @@ -1069,8 +1082,9 @@ bool Bitmap::CopyPixel_AlphaOptimized( const tools::Rectangle& rRectDst, const t for( long nY = nSrcEndY1, nYN = nDstEndY1; nY >= nSrcY; nY--, nYN-- ) { Scanline pScanline = pWriteAcc->GetScanline(nYN); + Scanline pScanlineSrc = pWriteAcc->GetScanline(nY); for( long nX = nSrcX, nXN = nDstX; nX <= nSrcEndX1; nX++, nXN++ ) - pWriteAcc->SetPixelOnData( pScanline, nXN, pWriteAcc->GetPixel( nY, nX ) ); + pWriteAcc->SetPixelOnData( pScanline, nXN, pWriteAcc->GetPixelFromData( pScanlineSrc, nX ) ); } } else if( ( nDstX >= nSrcX ) && ( nDstY <= nSrcY ) ) @@ -1078,8 +1092,9 @@ bool Bitmap::CopyPixel_AlphaOptimized( const tools::Rectangle& rRectDst, const t for( long nY = nSrcY, nYN = nDstY; nY <= nSrcEndY1; nY++, nYN++ ) { Scanline pScanline = pWriteAcc->GetScanline(nYN); + Scanline pScanlineSrc = pWriteAcc->GetScanline(nY); for( long nX = nSrcEndX1, nXN = nDstEndX1; nX >= nSrcX; nX--, nXN-- ) - pWriteAcc->SetPixelOnData( pScanline, nXN, pWriteAcc->GetPixel( nY, nX ) ); + pWriteAcc->SetPixelOnData( pScanline, nXN, pWriteAcc->GetPixelFromData( pScanlineSrc, nX ) ); } } else @@ -1087,8 +1102,9 @@ bool Bitmap::CopyPixel_AlphaOptimized( const tools::Rectangle& rRectDst, const t for( long nY = nSrcEndY1, nYN = nDstEndY1; nY >= nSrcY; nY--, nYN-- ) { Scanline pScanline = pWriteAcc->GetScanline(nYN); + Scanline pScanlineSrc = pWriteAcc->GetScanline(nY); for( long nX = nSrcEndX1, nXN = nDstEndX1; nX >= nSrcX; nX--, nXN-- ) - pWriteAcc->SetPixelOnData( pScanline, nXN, pWriteAcc->GetPixel( nY, nX ) ); + pWriteAcc->SetPixelOnData( pScanline, nXN, pWriteAcc->GetPixelFromData( pScanlineSrc, nX ) ); } } @@ -1291,9 +1307,10 @@ Bitmap Bitmap::CreateMask( const Color& rTransColor, sal_uInt8 nTol ) const for (long nY = 0; nY < nHeight; ++nY) { Scanline pScanline = pWriteAcc->GetScanline( nY ); + Scanline pScanlineRead = pReadAcc->GetScanline( nY ); for (long nX = 0; nX < nWidth; ++nX) { - if( aTest == pReadAcc->GetPixel( nY, nX ) ) + if( aTest == pReadAcc->GetPixelFromData( pScanlineRead, nX ) ) pWriteAcc->SetPixelOnData( pScanline, nX, aWhite ); else pWriteAcc->SetPixelOnData( pScanline, nX, aBlack ); @@ -1317,9 +1334,10 @@ Bitmap Bitmap::CreateMask( const Color& rTransColor, sal_uInt8 nTol ) const for( long nY = 0; nY < nHeight; nY++ ) { Scanline pScanline = pWriteAcc->GetScanline( nY ); + Scanline pScanlineRead = pReadAcc->GetScanline(nY); for( long nX = 0; nX < nWidth; nX++ ) { - aCol = pReadAcc->GetPaletteColor( pReadAcc->GetPixelIndex( nY, nX ) ); + aCol = pReadAcc->GetPaletteColor( pReadAcc->GetIndexFromData( pScanlineRead, nX ) ); nR = aCol.GetRed(); nG = aCol.GetGreen(); nB = aCol.GetBlue(); @@ -1340,9 +1358,10 @@ Bitmap Bitmap::CreateMask( const Color& rTransColor, sal_uInt8 nTol ) const for( long nY = 0; nY < nHeight; nY++ ) { Scanline pScanline = pWriteAcc->GetScanline( nY ); + Scanline pScanlineRead = pReadAcc->GetScanline(nY); for( long nX = 0; nX < nWidth; nX++ ) { - aCol = pReadAcc->GetPixel( nY, nX ); + aCol = pReadAcc->GetPixelFromData( pScanlineRead, nX ); nR = aCol.GetRed(); nG = aCol.GetGreen(); nB = aCol.GetBlue(); @@ -1406,10 +1425,11 @@ vcl::Region Bitmap::CreateRegion( const Color& rColor, const tools::Rectangle& r //aSubRect.Top() = aSubRect.Bottom() = nY; std::vector< long > aNewLine; long nX(nLeft); + Scanline pScanlineRead = pReadAcc->GetScanline(nY); for( ; nX <= nRight; ) { - while( ( nX <= nRight ) && ( aMatch != pReadAcc->GetPixel( nY, nX ) ) ) + while( ( nX <= nRight ) && ( aMatch != pReadAcc->GetPixelFromData( pScanlineRead, nX ) ) ) nX++; if( nX <= nRight ) @@ -1417,7 +1437,7 @@ vcl::Region Bitmap::CreateRegion( const Color& rColor, const tools::Rectangle& r aNewLine.push_back(nX); //aSubRect.Left() = nX; - while( ( nX <= nRight ) && ( aMatch == pReadAcc->GetPixel( nY, nX ) ) ) + while( ( nX <= nRight ) && ( aMatch == pReadAcc->GetPixelFromData( pScanlineRead, nX ) ) ) nX++; //aSubRect.Right() = nX - 1; @@ -1522,8 +1542,11 @@ bool Bitmap::Replace( const Bitmap& rMask, const Color& rReplaceColor ) std::fill( pFlags.get(), pFlags.get()+nMaxColors, false ); for( long nY = 0; nY < nHeight; nY++ ) + { + Scanline pScanline = pAcc->GetScanline(nY); for( long nX = 0; nX < nWidth; nX++ ) - pFlags[ pAcc->GetPixelIndex( nY, nX ) ] = true; + pFlags[ pAcc->GetIndexFromData( pScanline, nX ) ] = true; + } for( sal_uInt16 i = 0; i < nMaxColors; i++ ) { @@ -1543,8 +1566,9 @@ bool Bitmap::Replace( const Bitmap& rMask, const Color& rReplaceColor ) for( long nY = 0; nY < nHeight; nY++ ) { Scanline pScanline = pAcc->GetScanline( nY ); + Scanline pScanlineMask = pMaskAcc->GetScanline( nY ); for( long nX = 0; nX < nWidth; nX++ ) - if( pMaskAcc->GetPixel( nY, nX ) == aMaskWhite ) + if( pMaskAcc->GetPixelFromData( pScanlineMask, nX ) == aMaskWhite ) pAcc->SetPixelOnData( pScanline, nX, aReplace ); } @@ -1571,10 +1595,11 @@ bool Bitmap::Replace( const AlphaMask& rAlpha, const Color& rMergeColor ) for( long nY = 0; nY < nHeight; nY++ ) { Scanline pScanline = pNewAcc->GetScanline( nY ); + Scanline pScanlineAlpha = pAlphaAcc->GetScanline( nY ); for( long nX = 0; nX < nWidth; nX++ ) { aCol = pAcc->GetColor( nY, nX ); - pNewAcc->SetPixelOnData( pScanline, nX, aCol.Merge( rMergeColor, 255 - pAlphaAcc->GetPixelIndex( nY, nX ) ) ); + pNewAcc->SetPixelOnData( pScanline, nX, aCol.Merge( rMergeColor, 255 - pAlphaAcc->GetIndexFromData( pScanlineAlpha, nX ) ) ); } } @@ -1655,7 +1680,7 @@ bool Bitmap::Replace( const Color& rSearchColor, const Color& rReplaceColor, sal Scanline pScanline = pAcc->GetScanline( nY ); for( long nX = 0, nWidth = pAcc->Width(); nX < nWidth; nX++ ) { - aCol = pAcc->GetPixel( nY, nX ); + aCol = pAcc->GetPixelFromData( pScanline, nX ); if( nMinR <= aCol.GetRed() && nMaxR >= aCol.GetRed() && nMinG <= aCol.GetGreen() && nMaxG >= aCol.GetGreen() && @@ -1755,7 +1780,7 @@ bool Bitmap::Replace( const Color* pSearchColors, const Color* pReplaceColors, Scanline pScanline = pAcc->GetScanline( nY ); for( long nX = 0, nWidth = pAcc->Width(); nX < nWidth; nX++ ) { - aCol = pAcc->GetPixel( nY, nX ); + aCol = pAcc->GetPixelFromData( pScanline, nX ); for( sal_uLong i = 0; i < nColorCount; i++ ) { @@ -1818,9 +1843,10 @@ bool Bitmap::CombineSimple( const Bitmap& rMask, BmpCombine eCombine ) for( long nY = 0; nY < nHeight; nY++ ) { Scanline pScanline = pAcc->GetScanline( nY ); + Scanline pScanlineMask = pMaskAcc->GetScanline( nY ); for( long nX = 0; nX < nWidth; nX++ ) { - if( pMaskAcc->GetPixel( nY, nX ) != aMaskBlack && pAcc->GetPixel( nY, nX ) != aBlack ) + if( pMaskAcc->GetPixelFromData( pScanlineMask, nX ) != aMaskBlack && pAcc->GetPixelFromData( pScanline, nX ) != aBlack ) pAcc->SetPixelOnData( pScanline, nX, aWhite ); else pAcc->SetPixelOnData( pScanline, nX, aBlack ); @@ -1834,9 +1860,10 @@ bool Bitmap::CombineSimple( const Bitmap& rMask, BmpCombine eCombine ) for( long nY = 0; nY < nHeight; nY++ ) { Scanline pScanline = pAcc->GetScanline( nY ); + Scanline pScanlineMask = pMaskAcc->GetScanline( nY ); for( long nX = 0; nX < nWidth; nX++ ) { - if( pMaskAcc->GetPixel( nY, nX ) != aMaskBlack || pAcc->GetPixel( nY, nX ) != aBlack ) + if( pMaskAcc->GetPixelFromData( pScanlineMask, nX ) != aMaskBlack || pAcc->GetPixelFromData( pScanline, nX ) != aBlack ) pAcc->SetPixelOnData( pScanline, nX, aWhite ); else pAcc->SetPixelOnData( pScanline, nX, aBlack ); @@ -1875,10 +1902,11 @@ bool Bitmap::Blend( const AlphaMask& rAlpha, const Color& rBackgroundColor ) for( long nY = 0; nY < nHeight; ++nY ) { Scanline pScanline = pAcc->GetScanline( nY ); + Scanline pScanlineAlpha = pAlphaAcc->GetScanline( nY ); for( long nX = 0; nX < nWidth; ++nX ) pAcc->SetPixelOnData( pScanline, nX, - pAcc->GetPixel( nY, nX ).Merge( rBackgroundColor, - 255 - pAlphaAcc->GetPixelIndex( nY, nX ) ) ); + pAcc->GetPixelFromData( pScanline, nX ).Merge( rBackgroundColor, + 255 - pAlphaAcc->GetIndexFromData( pScanlineAlpha, nX ) ) ); } bRet = true; diff --git a/vcl/source/gdi/bitmap3.cxx b/vcl/source/gdi/bitmap3.cxx index ee6dbb946e02..72f640a6b9c4 100644 --- a/vcl/source/gdi/bitmap3.cxx +++ b/vcl/source/gdi/bitmap3.cxx @@ -322,9 +322,10 @@ bool Bitmap::ImplMakeMono( sal_uInt8 cThreshold ) for( long nY = 0; nY < nHeight; nY++ ) { Scanline pScanline = pWriteAcc->GetScanline(nY); + Scanline pScanlineRead = pReadAcc->GetScanline(nY); for( long nX = 0; nX < nWidth; nX++ ) { - const sal_uInt8 cIndex = pReadAcc->GetPixelIndex( nY, nX ); + const sal_uInt8 cIndex = pReadAcc->GetIndexFromData( pScanlineRead, nX ); if( pReadAcc->GetPaletteColor( cIndex ).GetLuminance() >= cThreshold ) { @@ -340,9 +341,10 @@ bool Bitmap::ImplMakeMono( sal_uInt8 cThreshold ) for( long nY = 0; nY < nHeight; nY++ ) { Scanline pScanline = pWriteAcc->GetScanline(nY); + Scanline pScanlineRead = pReadAcc->GetScanline(nY); for( long nX = 0; nX < nWidth; nX++ ) { - if( pReadAcc->GetPixel( nY, nX ).GetLuminance() >= + if( pReadAcc->GetPixelFromData( pScanlineRead, nX ).GetLuminance() >= cThreshold ) { pWriteAcc->SetPixelOnData( pScanline, nX, aWhite ); @@ -405,9 +407,10 @@ bool Bitmap::ImplMakeGreyscales( sal_uInt16 nGreys ) for( long nY = 0; nY < nHeight; nY++ ) { Scanline pScanline = pWriteAcc->GetScanline(nY); + Scanline pScanlineRead = pReadAcc->GetScanline(nY); for( long nX = 0; nX < nWidth; nX++ ) { - const sal_uInt8 cIndex = pReadAcc->GetPixelIndex( nY, nX ); + const sal_uInt8 cIndex = pReadAcc->GetIndexFromData( pScanlineRead, nX ); pWriteAcc->SetPixelOnData( pScanline, nX, BitmapColor(pReadAcc->GetPaletteColor( cIndex ).GetLuminance() >> nShift) ); } @@ -458,8 +461,9 @@ bool Bitmap::ImplMakeGreyscales( sal_uInt16 nGreys ) for( long nY = 0; nY < nHeight; nY++ ) { Scanline pScanline = pWriteAcc->GetScanline(nY); + Scanline pScanlineRead = pReadAcc->GetScanline(nY); for( long nX = 0; nX < nWidth; nX++ ) - pWriteAcc->SetPixelOnData( pScanline, nX, BitmapColor(pReadAcc->GetPixel( nY, nX ).GetLuminance() >> nShift) ); + pWriteAcc->SetPixelOnData( pScanline, nX, BitmapColor(pReadAcc->GetPixelFromData( pScanlineRead, nX ).GetLuminance() >> nShift) ); } } @@ -527,9 +531,10 @@ bool Bitmap::ImplConvertUp(sal_uInt16 nBitCount, Color const * pExtColor) for (long nY = 0; nY < nHeight; nY++) { Scanline pScanline = pWriteAcc->GetScanline(nY); + Scanline pScanlineRead = pReadAcc->GetScanline(nY); for (long nX = 0; nX < nWidth; nX++) { - pWriteAcc->SetPixelOnData(pScanline, nX, pReadAcc->GetPixel(nY, nX)); + pWriteAcc->SetPixelOnData(pScanline, nX, pReadAcc->GetPixelFromData(pScanlineRead, nX)); } } } @@ -540,9 +545,10 @@ bool Bitmap::ImplConvertUp(sal_uInt16 nBitCount, Color const * pExtColor) for (long nY = 0; nY < nHeight; nY++) { Scanline pScanline = pWriteAcc->GetScanline(nY); + Scanline pScanlineRead = pReadAcc->GetScanline(nY); for (long nX = 0; nX < nWidth; nX++) { - pWriteAcc->SetPixelOnData(pScanline, nX, pReadAcc->GetPaletteColor(pReadAcc->GetPixelIndex(nY, nX))); + pWriteAcc->SetPixelOnData(pScanline, nX, pReadAcc->GetPaletteColor(pReadAcc->GetIndexFromData(pScanlineRead, nX))); } } } @@ -551,9 +557,10 @@ bool Bitmap::ImplConvertUp(sal_uInt16 nBitCount, Color const * pExtColor) for (long nY = 0; nY < nHeight; nY++) { Scanline pScanline = pWriteAcc->GetScanline(nY); + Scanline pScanlineRead = pReadAcc->GetScanline(nY); for (long nX = 0; nX < nWidth; nX++) { - pWriteAcc->SetPixelOnData(pScanline, nX, pReadAcc->GetPixel(nY, nX)); + pWriteAcc->SetPixelOnData(pScanline, nX, pReadAcc->GetPixelFromData(pScanlineRead, nX)); } } } @@ -627,12 +634,13 @@ bool Bitmap::ImplConvertDown(sal_uInt16 nBitCount, Color const * pExtColor) for (long nY = 0; nY < std::min(nHeight, 2L); nY++, nYTmp++) { pQLine2 = !nY ? aErrQuad1.data() : aErrQuad2.data(); + Scanline pScanlineRead = pReadAcc->GetScanline(nYTmp); for (long nX = 0; nX < nWidth; nX++) { if (pReadAcc->HasPalette()) - pQLine2[nX] = pReadAcc->GetPaletteColor(pReadAcc->GetPixelIndex(nYTmp, nX)); + pQLine2[nX] = pReadAcc->GetPaletteColor(pReadAcc->GetIndexFromData(pScanlineRead, nX)); else - pQLine2[nX] = pReadAcc->GetPixel(nYTmp, nX); + pQLine2[nX] = pReadAcc->GetPixelFromData(pScanlineRead, nX); } } @@ -672,12 +680,13 @@ bool Bitmap::ImplConvertDown(sal_uInt16 nBitCount, Color const * pExtColor) if (nYTmp < nHeight) { + Scanline pScanlineRead = pReadAcc->GetScanline(nYTmp); for (nX = 0; nX < nWidth; nX++) { if (pReadAcc->HasPalette()) - pQLine2[nX] = pReadAcc->GetPaletteColor(pReadAcc->GetPixelIndex(nYTmp, nX)); + pQLine2[nX] = pReadAcc->GetPaletteColor(pReadAcc->GetIndexFromData(pScanlineRead, nX)); else - pQLine2[nX] = pReadAcc->GetPixel(nYTmp, nX); + pQLine2[nX] = pReadAcc->GetPixelFromData(pScanlineRead, nX); } } } @@ -742,9 +751,10 @@ bool Bitmap::ImplConvertGhosted() for( long nY = 0; nY < nHeight; nY++ ) { Scanline pScanline = pW->GetScanline(nY); + Scanline pScanlineRead = pR->GetScanline(nY); for( long nX = 0; nX < nWidth; nX++ ) { - const BitmapColor aOld( pR->GetPixel( nY, nX ) ); + const BitmapColor aOld( pR->GetPixelFromData( pScanlineRead, nX ) ); pW->SetPixelOnData( pScanline, nX, BitmapColor( ( aOld.GetRed() >> 1 ) | 0x80, ( aOld.GetGreen() >> 1 ) | 0x80, ( aOld.GetBlue() >> 1 ) | 0x80 ) ); @@ -993,9 +1003,10 @@ bool Bitmap::ImplScaleFast( const double& rScaleX, const double& rScaleY ) { long nMapY = pLutY[ nActY ]; Scanline pScanline = pWriteAcc->GetScanline(nActY); + Scanline pScanlineRead = pReadAcc->GetScanline(nMapY); for( long nX = 0; nX < nNewWidth; nX++ ) - pWriteAcc->SetPixelOnData( pScanline, nX, pReadAcc->GetPixel( nMapY , pLutX[ nX ] ) ); + pWriteAcc->SetPixelOnData( pScanline, nX, pReadAcc->GetPixelFromData( pScanlineRead , pLutX[ nX ] ) ); while( ( nActY < nNewHeight1 ) && ( pLutY[ nActY + 1 ] == nMapY ) ) { @@ -1057,16 +1068,17 @@ bool Bitmap::ImplScaleInterpolate( const double& rScaleX, const double& rScaleY for( long nY = 0; nY < nHeight; nY++ ) { + Scanline pScanlineRead = pReadAcc->GetScanline(nY); if( 1 == nWidth ) { BitmapColor aCol0; if( pReadAcc->HasPalette() ) { - aCol0 = pReadAcc->GetPaletteColor( pReadAcc->GetPixelIndex( nY, 0 ) ); + aCol0 = pReadAcc->GetPaletteColor( pReadAcc->GetIndexFromData( pScanlineRead, 0 ) ); } else { - aCol0 = pReadAcc->GetPixel( nY, 0 ); + aCol0 = pReadAcc->GetPixelFromData( pScanlineRead, 0 ); } Scanline pScanline = pWriteAcc->GetScanline(nY); @@ -1085,13 +1097,13 @@ bool Bitmap::ImplScaleInterpolate( const double& rScaleX, const double& rScaleY BitmapColor aCol0, aCol1; if( pReadAcc->HasPalette() ) { - aCol0 = pReadAcc->GetPaletteColor( pReadAcc->GetPixelIndex( nY, nTemp++ ) ); - aCol1 = pReadAcc->GetPaletteColor( pReadAcc->GetPixelIndex( nY, nTemp ) ); + aCol0 = pReadAcc->GetPaletteColor( pReadAcc->GetIndexFromData( pScanlineRead, nTemp++ ) ); + aCol1 = pReadAcc->GetPaletteColor( pReadAcc->GetIndexFromData( pScanlineRead, nTemp ) ); } else { - aCol0 = pReadAcc->GetPixel( nY, nTemp++ ); - aCol1 = pReadAcc->GetPixel( nY, nTemp ); + aCol0 = pReadAcc->GetPixelFromData( pScanlineRead, nTemp++ ); + aCol1 = pReadAcc->GetPixelFromData( pScanlineRead, nTemp ); } nTemp = pLutFrac[ nX ]; @@ -1244,9 +1256,10 @@ bool Bitmap::ImplDitherMatrix() for( sal_uLong nY = 0; nY < nHeight; nY++ ) { Scanline pScanline = pWriteAcc->GetScanline(nY); + Scanline pScanlineRead = pReadAcc->GetScanline(nY); for( sal_uLong nX = 0, nModY = ( nY & 0x0FUL ) << 4; nX < nWidth; nX++ ) { - const BitmapColor aCol( pReadAcc->GetPaletteColor( pReadAcc->GetPixelIndex( nY, nX ) ) ); + const BitmapColor aCol( pReadAcc->GetPaletteColor( pReadAcc->GetIndexFromData( pScanlineRead, nX ) ) ); const sal_uLong nD = nVCLDitherLut[ nModY + ( nX & 0x0FUL ) ]; const sal_uLong nR = ( nVCLLut[ aCol.GetRed() ] + nD ) >> 16; const sal_uLong nG = ( nVCLLut[ aCol.GetGreen() ] + nD ) >> 16; @@ -1262,9 +1275,10 @@ bool Bitmap::ImplDitherMatrix() for( sal_uLong nY = 0; nY < nHeight; nY++ ) { Scanline pScanline = pWriteAcc->GetScanline(nY); + Scanline pScanlineRead = pReadAcc->GetScanline(nY); for( sal_uLong nX = 0, nModY = ( nY & 0x0FUL ) << 4; nX < nWidth; nX++ ) { - const BitmapColor aCol( pReadAcc->GetPixel( nY, nX ) ); + const BitmapColor aCol( pReadAcc->GetPixelFromData( pScanlineRead, nX ) ); const sal_uLong nD = nVCLDitherLut[ nModY + ( nX & 0x0FUL ) ]; const sal_uLong nR = ( nVCLLut[ aCol.GetRed() ] + nD ) >> 16; const sal_uLong nG = ( nVCLLut[ aCol.GetGreen() ] + nD ) >> 16; @@ -1329,9 +1343,10 @@ bool Bitmap::ImplDitherFloyd() if( bPal ) { + Scanline pScanlineRead = pReadAcc->GetScanline(0); for( long nZ = 0; nZ < nWidth; nZ++ ) { - aColor = pReadAcc->GetPaletteColor( pReadAcc->GetPixelIndex( 0, nZ ) ); + aColor = pReadAcc->GetPaletteColor( pReadAcc->GetIndexFromData( pScanlineRead, nZ ) ); *pTmp++ = static_cast<long>(aColor.GetBlue()) << 12; *pTmp++ = static_cast<long>(aColor.GetGreen()) << 12; @@ -1340,9 +1355,10 @@ bool Bitmap::ImplDitherFloyd() } else { + Scanline pScanlineRead = pReadAcc->GetScanline(0); for( long nZ = 0; nZ < nWidth; nZ++ ) { - aColor = pReadAcc->GetPixel( 0, nZ ); + aColor = pReadAcc->GetPixelFromData( pScanlineRead, nZ ); *pTmp++ = static_cast<long>(aColor.GetBlue()) << 12; *pTmp++ = static_cast<long>(aColor.GetGreen()) << 12; @@ -1360,9 +1376,10 @@ bool Bitmap::ImplDitherFloyd() { if( bPal ) { + Scanline pScanlineRead = pReadAcc->GetScanline(nY); for( long nZ = 0; nZ < nWidth; nZ++ ) { - aColor = pReadAcc->GetPaletteColor( pReadAcc->GetPixelIndex( nY, nZ ) ); + aColor = pReadAcc->GetPaletteColor( pReadAcc->GetIndexFromData( pScanlineRead, nZ ) ); *pTmp++ = static_cast<long>(aColor.GetBlue()) << 12; *pTmp++ = static_cast<long>(aColor.GetGreen()) << 12; @@ -1371,9 +1388,10 @@ bool Bitmap::ImplDitherFloyd() } else { + Scanline pScanlineRead = pReadAcc->GetScanline(nY); for( long nZ = 0; nZ < nWidth; nZ++ ) { - aColor = pReadAcc->GetPixel( nY, nZ ); + aColor = pReadAcc->GetPixelFromData( pScanlineRead, nZ ); *pTmp++ = static_cast<long>(aColor.GetBlue()) << 12; *pTmp++ = static_cast<long>(aColor.GetGreen()) << 12; @@ -1458,8 +1476,9 @@ bool Bitmap::ImplDitherFloyd16() for( long nY = 0; nY < std::min( nHeight, 2L ); nY++, nYTmp++ ) { pQLine2 = !nY ? pErrQuad1.get() : pErrQuad2.get(); + Scanline pScanlineRead = pReadAcc->GetScanline(nYTmp); for( long nX = 0; nX < nWidth; nX++ ) - pQLine2[ nX ] = pReadAcc->GetPixel( nYTmp, nX ); + pQLine2[ nX ] = pReadAcc->GetPixelFromData( pScanlineRead, nX ); } assert(pQLine2 || nHeight == 0); @@ -1502,8 +1521,11 @@ bool Bitmap::ImplDitherFloyd16() pQLine2 = bQ1 ? pErrQuad2.get() : pErrQuad1.get(); if( nYTmp < nHeight ) + { + Scanline pScanlineRead = pReadAcc->GetScanline(nYTmp); for( nX = 0; nX < nWidth; nX++ ) - pQLine2[ nX ] = pReadAcc->GetPixel( nYTmp, nX ); + pQLine2[ nX ] = pReadAcc->GetPixelFromData( pScanlineRead, nX ); + } } bRet = true; @@ -1580,8 +1602,12 @@ bool Bitmap::ImplReduceSimple( sal_uInt16 nColorCount ) for( long nY = 0; nY < nHeight; nY++ ) { Scanline pScanline = pWAcc->GetScanline(nY); + Scanline pScanlineRead = pRAcc->GetScanline(nY); for( long nX =0; nX < nWidth; nX++ ) - pWAcc->SetPixelOnData( pScanline, nX, BitmapColor(static_cast<sal_uInt8>(aOct.GetBestPaletteIndex( pRAcc->GetPaletteColor( pRAcc->GetPixelIndex( nY, nX ) )))) ); + { + auto c = pRAcc->GetPaletteColor( pRAcc->GetIndexFromData( pScanlineRead, nX ) ); + pWAcc->SetPixelOnData( pScanline, nX, BitmapColor(static_cast<sal_uInt8>(aOct.GetBestPaletteIndex( c ))) ); + } } } else @@ -1589,8 +1615,12 @@ bool Bitmap::ImplReduceSimple( sal_uInt16 nColorCount ) for( long nY = 0; nY < nHeight; nY++ ) { Scanline pScanline = pWAcc->GetScanline(nY); + Scanline pScanlineRead = pRAcc->GetScanline(nY); for( long nX =0; nX < nWidth; nX++ ) - pWAcc->SetPixelOnData( pScanline, nX, BitmapColor(static_cast<sal_uInt8>(aOct.GetBestPaletteIndex( pRAcc->GetPixel( nY, nX ) ))) ); + { + auto c = pRAcc->GetPixelFromData( pScanlineRead, nX ); + pWAcc->SetPixelOnData( pScanline, nX, BitmapColor(static_cast<sal_uInt8>(aOct.GetBestPaletteIndex( c ))) ); + } } } @@ -1679,9 +1709,10 @@ bool Bitmap::ImplReducePopular( sal_uInt16 nColCount ) { for( long nY = 0; nY < nHeight; nY++ ) { + Scanline pScanlineRead = pRAcc->GetScanline(nY); for( long nX = 0; nX < nWidth; nX++ ) { - const BitmapColor& rCol = pRAcc->GetPaletteColor( pRAcc->GetPixelIndex( nY, nX ) ); + const BitmapColor& rCol = pRAcc->GetPaletteColor( pRAcc->GetIndexFromData( pScanlineRead, nX ) ); pCountTable[ ( ( static_cast<sal_uInt32>(rCol.GetRed()) >> nRightShiftBits ) << nLeftShiftBits2 ) | ( ( static_cast<sal_uInt32>(rCol.GetGreen()) >> nRightShiftBits ) << nLeftShiftBits1 ) | ( static_cast<sal_uInt32>(rCol.GetBlue()) >> nRightShiftBits ) ].mnCount++; @@ -1692,9 +1723,10 @@ bool Bitmap::ImplReducePopular( sal_uInt16 nColCount ) { for( long nY = 0; nY < nHeight; nY++ ) { + Scanline pScanlineRead = pRAcc->GetScanline(nY); for( long nX = 0; nX < nWidth; nX++ ) { - const BitmapColor aCol( pRAcc->GetPixel( nY, nX ) ); + const BitmapColor aCol( pRAcc->GetPixelFromData( pScanlineRead, nX ) ); pCountTable[ ( ( static_cast<sal_uInt32>(aCol.GetRed()) >> nRightShiftBits ) << nLeftShiftBits2 ) | ( ( static_cast<sal_uInt32>(aCol.GetGreen()) >> nRightShiftBits ) << nLeftShiftBits1 ) | ( static_cast<sal_uInt32>(aCol.GetBlue()) >> nRightShiftBits ) ].mnCount++; @@ -1732,9 +1764,10 @@ bool Bitmap::ImplReducePopular( sal_uInt16 nColCount ) for( long nY = 0; nY < nHeight; nY++ ) { Scanline pScanline = pWAcc->GetScanline(nY); + Scanline pScanlineRead = pRAcc->GetScanline(nY); for( long nX = 0; nX < nWidth; nX++ ) { - const BitmapColor& rCol = pRAcc->GetPaletteColor( pRAcc->GetPixelIndex( nY, nX ) ); + const BitmapColor& rCol = pRAcc->GetPaletteColor( pRAcc->GetIndexFromData( pScanlineRead, nX ) ); aDstCol.SetIndex( pIndexMap[ ( ( static_cast<sal_uInt32>(rCol.GetRed()) >> nRightShiftBits ) << nLeftShiftBits2 ) | ( ( static_cast<sal_uInt32>(rCol.GetGreen()) >> nRightShiftBits ) << nLeftShiftBits1 ) | ( static_cast<sal_uInt32>(rCol.GetBlue()) >> nRightShiftBits ) ] ); @@ -1747,9 +1780,10 @@ bool Bitmap::ImplReducePopular( sal_uInt16 nColCount ) for( long nY = 0; nY < nHeight; nY++ ) { Scanline pScanline = pWAcc->GetScanline(nY); + Scanline pScanlineRead = pRAcc->GetScanline(nY); for( long nX = 0; nX < nWidth; nX++ ) { - const BitmapColor aCol( pRAcc->GetPixel( nY, nX ) ); + const BitmapColor aCol( pRAcc->GetPixelFromData( pScanlineRead, nX ) ); aDstCol.SetIndex( pIndexMap[ ( ( static_cast<sal_uInt32>(aCol.GetRed()) >> nRightShiftBits ) << nLeftShiftBits2 ) | ( ( static_cast<sal_uInt32>(aCol.GetGreen()) >> nRightShiftBits ) << nLeftShiftBits1 ) | ( static_cast<sal_uInt32>(aCol.GetBlue()) >> nRightShiftBits ) ] ); @@ -1816,9 +1850,10 @@ bool Bitmap::ImplReduceMedian( sal_uInt16 nColCount ) { for( long nY = 0; nY < nHeight; nY++ ) { + Scanline pScanlineRead = pRAcc->GetScanline(nY); for( long nX = 0; nX < nWidth; nX++ ) { - const BitmapColor& rCol = pRAcc->GetPaletteColor( pRAcc->GetPixelIndex( nY, nX ) ); + const BitmapColor& rCol = pRAcc->GetPaletteColor( pRAcc->GetIndexFromData( pScanlineRead, nX ) ); pColBuf[ RGB15( rCol.GetRed() >> 3, rCol.GetGreen() >> 3, rCol.GetBlue() >> 3 ) ]++; } } @@ -1827,9 +1862,10 @@ bool Bitmap::ImplReduceMedian( sal_uInt16 nColCount ) { for( long nY = 0; nY < nHeight; nY++ ) { + Scanline pScanlineRead = pRAcc->GetScanline(nY); for( long nX = 0; nX < nWidth; nX++ ) { - const BitmapColor aCol( pRAcc->GetPixel( nY, nX ) ); + const BitmapColor aCol( pRAcc->GetPixelFromData( pScanlineRead, nX ) ); pColBuf[ RGB15( aCol.GetRed() >> 3, aCol.GetGreen() >> 3, aCol.GetBlue() >> 3 ) ]++; } } @@ -2140,7 +2176,7 @@ bool Bitmap::Adjust( short nLuminancePercent, short nContrastPercent, Scanline pScanline = pAcc->GetScanline(nY); for( long nX = 0; nX < nW; nX++ ) { - aCol = pAcc->GetPixel( nY, nX ); + aCol = pAcc->GetPixelFromData( pScanline, nX ); aCol.SetRed( cMapR[ aCol.GetRed() ] ); aCol.SetGreen( cMapG[ aCol.GetGreen() ] ); aCol.SetBlue( cMapB[ aCol.GetBlue() ] ); diff --git a/vcl/source/gdi/bitmap4.cxx b/vcl/source/gdi/bitmap4.cxx index 2e97c9cefc48..f71f48f31bbf 100644 --- a/vcl/source/gdi/bitmap4.cxx +++ b/vcl/source/gdi/bitmap4.cxx @@ -731,7 +731,7 @@ bool Bitmap::ImplSolarize( const BmpFilterParam* pFilterParam ) Scanline pScanline = pWriteAcc->GetScanline(nY); for( long nX = 0; nX < nWidth; nX++ ) { - aCol = pWriteAcc->GetPixel( nY, nX ); + aCol = pWriteAcc->GetPixelFromData( pScanline, nX ); if( aCol.GetLuminance() >= cThreshold ) pWriteAcc->SetPixelOnData( pScanline, nX, aCol.Invert() ); @@ -787,9 +787,10 @@ bool Bitmap::ImplSepia( const BmpFilterParam* pFilterParam ) for( long nY = 0; nY < nHeight ; nY++ ) { Scanline pScanline = pWriteAcc->GetScanline(nY); + Scanline pScanlineRead = pReadAcc->GetScanline(nY); for( long nX = 0; nX < nWidth; nX++ ) { - aCol.SetIndex( pIndexMap[ pReadAcc->GetPixel( nY, nX ).GetIndex() ] ); + aCol.SetIndex( pIndexMap[ pReadAcc->GetIndexFromData( pScanlineRead, nX ) ] ); pWriteAcc->SetPixelOnData( pScanline, nX, aCol ); } } @@ -799,9 +800,10 @@ bool Bitmap::ImplSepia( const BmpFilterParam* pFilterParam ) for( long nY = 0; nY < nHeight ; nY++ ) { Scanline pScanline = pWriteAcc->GetScanline(nY); + Scanline pScanlineRead = pReadAcc->GetScanline(nY); for( long nX = 0; nX < nWidth; nX++ ) { - aCol.SetIndex( pReadAcc->GetPixel( nY, nX ).GetLuminance() ); + aCol.SetIndex( pReadAcc->GetPixelFromData( pScanlineRead, nX ).GetLuminance() ); pWriteAcc->SetPixelOnData( pScanline, nX, aCol ); } } @@ -896,9 +898,10 @@ bool Bitmap::ImplMosaic( const BmpFilterParam* pFilterParam ) { for( nY = nY1, nSumR = nSumG = nSumB = 0; nY <= nY2; nY++ ) { + Scanline pScanlineRead = pReadAcc->GetScanline(nY); for( nX = nX1; nX <= nX2; nX++ ) { - aCol = pReadAcc->GetPixel( nY, nX ); + aCol = pReadAcc->GetPixelFromData( pScanlineRead, nX ); nSumR += aCol.GetRed(); nSumG += aCol.GetGreen(); nSumB += aCol.GetBlue(); @@ -932,9 +935,10 @@ bool Bitmap::ImplMosaic( const BmpFilterParam* pFilterParam ) { for( nY = nY1, nSumR = nSumG = nSumB = 0; nY <= nY2; nY++ ) { + Scanline pScanlineRead = pReadAcc->GetScanline(nY); for( nX = nX1; nX <= nX2; nX++ ) { - const BitmapColor& rCol = pReadAcc->GetPaletteColor( pReadAcc->GetPixelIndex( nY, nX ) ); + const BitmapColor& rCol = pReadAcc->GetPaletteColor( pReadAcc->GetIndexFromData( pScanlineRead, nX ) ); nSumR += rCol.GetRed(); nSumG += rCol.GetGreen(); nSumB += rCol.GetBlue(); @@ -1048,8 +1052,11 @@ bool Bitmap::ImplPopArt() // get pixel count for each palette entry for( long nY = 0; nY < nHeight ; nY++ ) + { + Scanline pScanline = pWriteAcc->GetScanline(nY); for( long nX = 0; nX < nWidth; nX++ ) - pPopArtTable[ pWriteAcc->GetPixel( nY, nX ).GetIndex() ].mnCount++; + pPopArtTable[ pWriteAcc->GetIndexFromData( pScanline, nX ) ].mnCount++; + } // sort table qsort( pPopArtTable, nEntryCount, sizeof( PopArtEntry ), ImplPopArtCmpFnc ); @@ -1240,9 +1247,10 @@ bool Bitmap::ImplSeparableUnsharpenFilter(const double radius) { BitmapColor aColor, aColorBlur; // For all pixels in original image subtract pixels values from blurred image - for( long x = 0; x < nWidth; x++ ) + for( long y = 0; y < nHeight; y++ ) { - for( long y = 0; y < nHeight; y++ ) + Scanline pScanline = pWriteAcc->GetScanline(y); + for( long x = 0; x < nWidth; x++ ) { aColorBlur = pReadAccBlur->GetColor( y , x ); aColor = pReadAcc->GetColor( y , x ); @@ -1252,7 +1260,7 @@ bool Bitmap::ImplSeparableUnsharpenFilter(const double radius) { static_cast<sal_uInt8>(MinMax( aColor.GetGreen() + (aColor.GetGreen() - aColorBlur.GetGreen()) * aAmount, 0, 255 )), static_cast<sal_uInt8>(MinMax( aColor.GetBlue() + (aColor.GetBlue() - aColorBlur.GetBlue()) * aAmount, 0, 255 )) ); - pWriteAcc->SetPixel( y, x, aResultColor ); + pWriteAcc->SetPixelOnData( pScanline, x, aResultColor ); } } diff --git a/vcl/source/gdi/bmpacc.cxx b/vcl/source/gdi/bmpacc.cxx index ad6b8ead20f2..74be5e1202b6 100644 --- a/vcl/source/gdi/bmpacc.cxx +++ b/vcl/source/gdi/bmpacc.cxx @@ -377,8 +377,9 @@ void BitmapWriteAccess::CopyScanline( long nY, const BitmapReadAccess& rReadAcc { // TODO: use fastbmp infrastructure Scanline pScanline = GetScanline( nY ); + Scanline pScanlineRead = rReadAcc.GetScanline(nY); for( long nX = 0, nWidth = std::min( mpBuffer->mnWidth, rReadAcc.Width() ); nX < nWidth; nX++ ) - SetPixelOnData( pScanline, nX, rReadAcc.GetPixel( nY, nX ) ); + SetPixelOnData( pScanline, nX, rReadAcc.GetPixelFromData( pScanlineRead, nX ) ); } } diff --git a/vcl/source/gdi/dibtools.cxx b/vcl/source/gdi/dibtools.cxx index 4393e2c63053..ba41e6132a58 100644 --- a/vcl/source/gdi/dibtools.cxx +++ b/vcl/source/gdi/dibtools.cxx @@ -1128,14 +1128,15 @@ bool ImplWriteRLE( SvStream& rOStm, BitmapReadAccess const & rAcc, bool bRLE4 ) { sal_uInt8* pTmp = pBuf.get(); nX = nBufCount = 0; + Scanline pScanline = rAcc.GetScanline( nY ); while( nX < nWidth ) { nCount = 1; - cPix = rAcc.GetPixelIndex( nY, nX++ ); + cPix = rAcc.GetIndexFromData( pScanline, nX++ ); while( ( nX < nWidth ) && ( nCount < 255 ) - && ( cPix == rAcc.GetPixelIndex( nY, nX ) ) ) + && ( cPix == rAcc.GetIndexFromData( pScanline, nX ) ) ) { nX++; nCount++; @@ -1154,7 +1155,7 @@ bool ImplWriteRLE( SvStream& rOStm, BitmapReadAccess const & rAcc, bool bRLE4 ) bFound = false; while( ( nX < nWidth ) && ( nCount < 256 ) - && ( cPix = rAcc.GetPixelIndex( nY, nX ) ) != cLast ) + && ( cPix = rAcc.GetIndexFromData( pScanline, nX ) ) != cLast ) { nX++; nCount++; cLast = cPix; @@ -1173,10 +1174,10 @@ bool ImplWriteRLE( SvStream& rOStm, BitmapReadAccess const & rAcc, bool bRLE4 ) { for ( sal_uLong i = 0; i < nCount; i++, pTmp++ ) { - *pTmp = rAcc.GetPixelIndex( nY, nSaveIndex++ ) << 4; + *pTmp = rAcc.GetIndexFromData( pScanline, nSaveIndex++ ) << 4; if ( ++i < nCount ) - *pTmp |= rAcc.GetPixelIndex( nY, nSaveIndex++ ); + *pTmp |= rAcc.GetIndexFromData( pScanline, nSaveIndex++ ); } nCount = ( nCount + 1 ) >> 1; @@ -1184,7 +1185,7 @@ bool ImplWriteRLE( SvStream& rOStm, BitmapReadAccess const & rAcc, bool bRLE4 ) else { for( sal_uLong i = 0; i < nCount; i++ ) - *pTmp++ = rAcc.GetPixelIndex( nY, nSaveIndex++ ); + *pTmp++ = rAcc.GetIndexFromData( pScanline, nSaveIndex++ ); } if ( nCount & 1 ) @@ -1198,12 +1199,12 @@ bool ImplWriteRLE( SvStream& rOStm, BitmapReadAccess const & rAcc, bool bRLE4 ) else { *pTmp++ = 1; - *pTmp++ = rAcc.GetPixelIndex( nY, nSaveIndex ) << (bRLE4 ? 4 : 0); + *pTmp++ = rAcc.GetIndexFromData( pScanline, nSaveIndex ) << (bRLE4 ? 4 : 0); if ( nCount == 3 ) { *pTmp++ = 1; - *pTmp++ = rAcc.GetPixelIndex( nY, ++nSaveIndex ) << ( bRLE4 ? 4 : 0 ); + *pTmp++ = rAcc.GetIndexFromData( pScanline, ++nSaveIndex ) << ( bRLE4 ? 4 : 0 ); nBufCount += 4; } else @@ -1313,6 +1314,7 @@ bool ImplWriteDIBBits(SvStream& rOStm, BitmapReadAccess const & rAcc, BitmapRead { sal_uInt8* pTmp = pBuf.get(); sal_uInt8 cTmp = 0; + Scanline pScanline = rAcc.GetScanline( nY ); for( long nX = 0, nShift = 8; nX < nWidth; nX++ ) { @@ -1323,7 +1325,7 @@ bool ImplWriteDIBBits(SvStream& rOStm, BitmapReadAccess const & rAcc, BitmapRead cTmp = 0; } - cTmp |= rAcc.GetPixelIndex( nY, nX ) << --nShift; + cTmp |= rAcc.GetIndexFromData( pScanline, nX ) << --nShift; } *pTmp = cTmp; @@ -1342,6 +1344,7 @@ bool ImplWriteDIBBits(SvStream& rOStm, BitmapReadAccess const & rAcc, BitmapRead { sal_uInt8* pTmp = pBuf.get(); sal_uInt8 cTmp = 0; + Scanline pScanline = rAcc.GetScanline( nY ); for( long nX = 0, nShift = 2; nX < nWidth; nX++ ) { @@ -1352,7 +1355,7 @@ bool ImplWriteDIBBits(SvStream& rOStm, BitmapReadAccess const & rAcc, BitmapRead cTmp = 0; } - cTmp |= rAcc.GetPixelIndex( nY, nX ) << ( --nShift << 2 ); + cTmp |= rAcc.GetIndexFromData( pScanline, nX ) << ( --nShift << 2 ); } *pTmp = cTmp; rOStm.WriteBytes( pBuf.get(), nAlignedWidth ); @@ -1365,9 +1368,10 @@ bool ImplWriteDIBBits(SvStream& rOStm, BitmapReadAccess const & rAcc, BitmapRead for( long nY = nHeight - 1; nY >= 0; nY-- ) { sal_uInt8* pTmp = pBuf.get(); + Scanline pScanline = rAcc.GetScanline( nY ); for( long nX = 0; nX < nWidth; nX++ ) - *pTmp++ = rAcc.GetPixelIndex( nY, nX ); + *pTmp++ = rAcc.GetIndexFromData( pScanline, nX ); rOStm.WriteBytes( pBuf.get(), nAlignedWidth ); } @@ -1390,6 +1394,7 @@ bool ImplWriteDIBBits(SvStream& rOStm, BitmapReadAccess const & rAcc, BitmapRead for( long nY = nHeight - 1; nY >= 0; nY-- ) { sal_uInt8* pTmp = pBuf.get(); + Scanline pScanlineAlpha = bWriteAlpha ? pAccAlpha->GetScanline( nY ) : nullptr; for( long nX = 0; nX < nWidth; nX++ ) { @@ -1403,7 +1408,7 @@ bool ImplWriteDIBBits(SvStream& rOStm, BitmapReadAccess const & rAcc, BitmapRead if(bWriteAlpha) { - *pTmp++ = sal_uInt8(0xff) - pAccAlpha->GetPixelIndex( nY, nX ); + *pTmp++ = sal_uInt8(0xff) - pAccAlpha->GetIndexFromData( pScanlineAlpha, nX ); } } diff --git a/vcl/source/gdi/impvect.cxx b/vcl/source/gdi/impvect.cxx index 5e7e8e31e4b6..d9ab48c1e937 100644 --- a/vcl/source/gdi/impvect.cxx +++ b/vcl/source/gdi/impvect.cxx @@ -646,8 +646,11 @@ bool ImplVectorize( const Bitmap& rColorBmp, GDIMetaFile& rMtf, } for( long nY = 0; nY < nHeight; nY++ ) + { + Scanline pScanlineRead = pRAcc->GetScanline( nY ); for( long nX = 0; nX < nWidth; nX++ ) - pColorSet[ pRAcc->GetPixel( nY, nX ).GetIndex() ].mbSet = true; + pColorSet[ pRAcc->GetIndexFromData( pScanlineRead, nX ) ].mbSet = true; + } qsort( pColorSet, 256, sizeof( ImplColorSet ), ImplColorSetCmpFnc ); @@ -769,9 +772,10 @@ ImplVectMap* ImplExpand( BitmapReadAccess* pRAcc, const Color& rColor ) for( nY = 0, nTmpY = 5; nY < nOldHeight; nY++, nTmpY += 4 ) { + Scanline pScanlineRead = pRAcc->GetScanline( nY ); for( nX = 0; nX < nOldWidth; ) { - if( pRAcc->GetPixel( nY, nX ) == aTest ) + if( pRAcc->GetPixelFromData( pScanlineRead, nX ) == aTest ) { nTmpX = pMapIn[ nX++ ]; nTmpY -= 3; @@ -781,7 +785,7 @@ ImplVectMap* ImplExpand( BitmapReadAccess* pRAcc, const Color& rColor ) pMap->Set( nTmpY++, nTmpX, VECT_CONT_INDEX ); pMap->Set( nTmpY, nTmpX, VECT_CONT_INDEX ); - while( nX < nOldWidth && pRAcc->GetPixel( nY, nX ) == aTest ) + while( nX < nOldWidth && pRAcc->GetPixelFromData( pScanlineRead, nX ) == aTest ) nX++; nTmpX = pMapOut[ nX - 1 ]; diff --git a/vcl/source/gdi/octree.cxx b/vcl/source/gdi/octree.cxx index a6450a2b0882..c7af47e71b1a 100644 --- a/vcl/source/gdi/octree.cxx +++ b/vcl/source/gdi/octree.cxx @@ -73,9 +73,10 @@ Octree::Octree(const BitmapReadAccess& rReadAcc, sal_uLong nColors) { for( long nY = 0; nY < nHeight; nY++ ) { + Scanline pScanline = pAcc->GetScanline( nY ); for( long nX = 0; nX < nWidth; nX++ ) { - pColor = &pAcc->GetPaletteColor( pAcc->GetPixelIndex( nY, nX ) ); + pColor = &pAcc->GetPaletteColor( pAcc->GetIndexFromData( pScanline, nX ) ); nLevel = 0; ImplAdd( &pTree ); @@ -92,9 +93,10 @@ Octree::Octree(const BitmapReadAccess& rReadAcc, sal_uLong nColors) for( long nY = 0; nY < nHeight; nY++ ) { + Scanline pScanline = pAcc->GetScanline( nY ); for( long nX = 0; nX < nWidth; nX++ ) { - aColor = pAcc->GetPixel( nY, nX ); + aColor = pAcc->GetPixelFromData( pScanline, nX ); nLevel = 0; ImplAdd( &pTree ); diff --git a/vcl/source/gdi/pngwrite.cxx b/vcl/source/gdi/pngwrite.cxx index e4c41d0386c6..0448cb1dee79 100644 --- a/vcl/source/gdi/pngwrite.cxx +++ b/vcl/source/gdi/pngwrite.cxx @@ -495,16 +495,17 @@ sal_uLong PNGWriterImpl::ImplGetFilter (sal_uLong nY, sal_uLong nXStart, sal_uLo { case 1: { + Scanline pScanline = mpAccess->GetScanline( nY ); sal_uLong nX, nXIndex; for (nX = nXStart, nXIndex = 0; nX < mnWidth; nX += nXAdd, nXIndex++) { sal_uLong nShift = (nXIndex & 7) ^ 7; if (nShift == 7) - *pDest = mpAccess->GetPixelIndex(nY, nX) << nShift; + *pDest = mpAccess->GetIndexFromData(pScanline, nX) << nShift; else if (nShift == 0) - *pDest++ |= mpAccess->GetPixelIndex(nY, nX) << nShift; + *pDest++ |= mpAccess->GetIndexFromData(pScanline, nX) << nShift; else - *pDest |= mpAccess->GetPixelIndex(nY, nX) << nShift; + *pDest |= mpAccess->GetIndexFromData(pScanline, nX) << nShift; } if ( (nXIndex & 7) != 0 ) pDest++; // byte is not completely used, so the bufferpointer is to correct @@ -513,13 +514,14 @@ sal_uLong PNGWriterImpl::ImplGetFilter (sal_uLong nY, sal_uLong nXStart, sal_uLo case 4: { + Scanline pScanline = mpAccess->GetScanline( nY ); sal_uLong nX, nXIndex; for (nX = nXStart, nXIndex = 0; nX < mnWidth; nX += nXAdd, nXIndex++) { if(nXIndex & 1) - *pDest++ |= mpAccess->GetPixelIndex(nY, nX); + *pDest++ |= mpAccess->GetIndexFromData(pScanline, nX); else - *pDest = mpAccess->GetPixelIndex(nY, nX) << 4; + *pDest = mpAccess->GetIndexFromData(pScanline, nX) << 4; } if (nXIndex & 1) pDest++; @@ -528,9 +530,10 @@ sal_uLong PNGWriterImpl::ImplGetFilter (sal_uLong nY, sal_uLong nXStart, sal_uLo case 8: { + Scanline pScanline = mpAccess->GetScanline( nY ); for (sal_uLong nX = nXStart; nX < mnWidth; nX += nXAdd) { - *pDest++ = mpAccess->GetPixelIndex( nY, nX ); + *pDest++ = mpAccess->GetIndexFromData( pScanline, nX ); } } break; @@ -546,27 +549,31 @@ sal_uLong PNGWriterImpl::ImplGetFilter (sal_uLong nY, sal_uLong nXStart, sal_uLo { if (mbTrueAlpha) { + Scanline pScanline = mpAccess->GetScanline( nY ); + Scanline pScanlineMask = mpMaskAccess->GetScanline( nY ); for (sal_uLong nX = nXStart; nX < mnWidth; nX += nXAdd) { - const BitmapColor& rColor = mpAccess->GetPixel(nY, nX); + const BitmapColor& rColor = mpAccess->GetPixelFromData(pScanline, nX); *pDest++ = rColor.GetRed(); *pDest++ = rColor.GetGreen(); *pDest++ = rColor.GetBlue(); - *pDest++ = 255 - mpMaskAccess->GetPixelIndex(nY, nX); + *pDest++ = 255 - mpMaskAccess->GetIndexFromData(pScanlineMask, nX); } } else { const BitmapColor aTrans(mpMaskAccess->GetBestMatchingColor(Color(COL_WHITE))); + Scanline pScanline = mpAccess->GetScanline( nY ); + Scanline pScanlineMask = mpMaskAccess->GetScanline( nY ); for (sal_uLong nX = nXStart; nX < mnWidth; nX += nXAdd) { - const BitmapColor& rColor = mpAccess->GetPixel(nY, nX); + const BitmapColor& rColor = mpAccess->GetPixelFromData(pScanline, nX); *pDest++ = rColor.GetRed(); *pDest++ = rColor.GetGreen(); *pDest++ = rColor.GetBlue(); - if(mpMaskAccess->GetPixel(nY, nX) == aTrans) + if(mpMaskAccess->GetPixelFromData(pScanlineMask, nX) == aTrans) *pDest++ = 0; else *pDest++ = 0xff; @@ -575,9 +582,10 @@ sal_uLong PNGWriterImpl::ImplGetFilter (sal_uLong nY, sal_uLong nXStart, sal_uLo } else { + Scanline pScanline = mpAccess->GetScanline( nY ); for (sal_uLong nX = nXStart; nX < mnWidth; nX += nXAdd) { - const BitmapColor& rColor = mpAccess->GetPixel(nY, nX); + const BitmapColor& rColor = mpAccess->GetPixelFromData(pScanline, nX); *pDest++ = rColor.GetRed(); *pDest++ = rColor.GetGreen(); *pDest++ = rColor.GetBlue(); diff --git a/vcl/source/helper/canvasbitmap.cxx b/vcl/source/helper/canvasbitmap.cxx index e7151f317894..6b6ed327b3b1 100644 --- a/vcl/source/helper/canvasbitmap.cxx +++ b/vcl/source/helper/canvasbitmap.cxx @@ -526,13 +526,14 @@ uno::Sequence< sal_Int8 > SAL_CALL VclCanvasBitmap::getData( rendering::IntegerB const long nNonAlphaBytes( m_nBitsPerInputPixel/8 ); const long nScanlineOffsetLeft(aRequestedArea.Left()*nNonAlphaBytes); Scanline pScan = m_pBmpAcc->GetScanline(y) + nScanlineOffsetLeft; + Scanline pScanlineAlpha = m_pAlphaAcc->GetScanline( y ); // input integer multiple of byte - copy directly for( long x=aRequestedArea.Left(); x<aRequestedArea.Right(); ++x ) { for( long i=0; i<nNonAlphaBytes; ++i ) *pOutScan++ = *pScan++; - *pOutScan++ = m_pAlphaAcc->GetPixelIndex( y, x ); + *pOutScan++ = m_pAlphaAcc->GetIndexFromData( pScanlineAlpha, x ); } } diff --git a/vcl/source/outdev/bitmap.cxx b/vcl/source/outdev/bitmap.cxx index 654a6df2ef6f..53a6e6551ae7 100644 --- a/vcl/source/outdev/bitmap.cxx +++ b/vcl/source/outdev/bitmap.cxx @@ -1528,6 +1528,7 @@ Bitmap OutputDevice::BlendBitmap( int nOutX; Scanline pScanline = pW->GetScanline(nY); + Scanline pScanlineAlpha = pA->GetScanline(nMapY); for( nX = 0, nOutX = nOffX; nX < nDstWidth; nX++, nOutX++ ) { long nMapX = pMapX[ nX ]; @@ -1538,7 +1539,7 @@ Bitmap OutputDevice::BlendBitmap( const sal_uLong nD = nVCLDitherLut[ nModY | ( nOutX & 0x0FL ) ]; aDstCol = pB->GetColor( nY, nX ); - aDstCol.Merge( pP->GetColor( nMapY, nMapX ), pA->GetPixelIndex( nMapY, nMapX ) ); + aDstCol.Merge( pP->GetColor( nMapY, nMapX ), pA->GetIndexFromData( pScanlineAlpha, nMapX ) ); aIndex.SetIndex( static_cast<sal_uInt8>( nVCLRLut[ ( nVCLLut[ aDstCol.GetRed() ] + nD ) >> 16 ] + nVCLGLut[ ( nVCLLut[ aDstCol.GetGreen() ] + nD ) >> 16 ] + nVCLBLut[ ( nVCLLut[ aDstCol.GetBlue() ] + nD ) >> 16 ] ) ); @@ -1592,7 +1593,7 @@ Bitmap OutputDevice::BlendBitmap( { nMapX = aBmpRect.Right() - nMapX; } - aDstCol = pB->GetPixel( nY, nX ); + aDstCol = pB->GetPixelFromData( pBScan, nX ); pB->SetPixelOnData( pBScan, nX, aDstCol.Merge( pP->GetPaletteColor( pPScan[ nMapX ] ), pAScan[ nMapX ] ) ); } @@ -1621,7 +1622,7 @@ Bitmap OutputDevice::BlendBitmap( { nMapX = aBmpRect.Right() - nMapX; } - aDstCol = pB->GetPixel( nY, nX ); + aDstCol = pB->GetPixelFromData( pBScan, nX ); pB->SetPixelOnData( pBScan, nX, aDstCol.Merge( pP->GetColor( nMapY, nMapX ), pAScan[ nMapX ] ) ); } diff --git a/vcl/source/outdev/transparent.cxx b/vcl/source/outdev/transparent.cxx index 04779af7617d..47f9967fe13f 100644 --- a/vcl/source/outdev/transparent.cxx +++ b/vcl/source/outdev/transparent.cxx @@ -526,11 +526,12 @@ void OutputDevice::EmulateDrawTransparent ( const tools::PolyPolygon& rPolyPoly, for( nY = 0; nY < nHeight; nY++ ) { Scanline pScanline = pW->GetScanline(nY); + Scanline pScanlineRead = pR->GetScanline(nY); for( nX = 0; nX < nWidth; nX++ ) { - if( pR->GetPixel( nY, nX ) == aBlack ) + if( pR->GetPixelFromData( pScanlineRead, nX ) == aBlack ) { - pW->SetPixelOnData( pScanline, nX, pMap[ pW->GetPixel( nY, nX ).GetIndex() ] ); + pW->SetPixelOnData( pScanline, nX, pMap[ pW->GetIndexFromData( pScanline, nX ) ] ); } } } @@ -571,9 +572,10 @@ void OutputDevice::EmulateDrawTransparent ( const tools::PolyPolygon& rPolyPoly, for( nY = 0; nY < nHeight; nY++ ) { Scanline pScanline = pW->GetScanline(nY); + Scanline pScanlineRead = pR->GetScanline(nY); for( nX = 0; nX < nWidth; nX++ ) { - if( pR->GetPixel( nY, nX ) == aBlack ) + if( pR->GetPixelFromData( pScanlineRead, nX ) == aBlack ) { aPixCol = pW->GetColor( nY, nX ); pW->SetPixelOnData(pScanline, nX, aPixCol.Merge( aFillCol, cTrans ) ); diff --git a/vcl/workben/vcldemo.cxx b/vcl/workben/vcldemo.cxx index c73991b57b92..b3008fedf471 100644 --- a/vcl/workben/vcldemo.cxx +++ b/vcl/workben/vcldemo.cxx @@ -1311,10 +1311,12 @@ public: { Scanline pScanlineMask = pMaskAcc->GetScanline( y ); Scanline pScanlineRec = pRecAcc->GetScanline( y ); + Scanline pScanlineW = pAccW->GetScanline( y ); + Scanline pScanlineB = pAccB->GetScanline( y ); for (int x = 0; x < nSizeX; x++) { - BitmapColor aColW = pAccW->GetPixel(y,x); - BitmapColor aColB = pAccB->GetPixel(y,x); + BitmapColor aColW = pAccW->GetPixelFromData(pScanlineW,x); + BitmapColor aColB = pAccB->GetPixelFromData(pScanlineB,x); long nAR = static_cast<long>(aColW.GetRed() - aColB.GetRed()); // (1-a) long nAG = static_cast<long>(aColW.GetGreen() - aColB.GetGreen()); // (1-a) long nAB = static_cast<long>(aColW.GetBlue() - aColB.GetBlue()); // (1-a) |