diff options
author | Jan-Marek Glogowski <glogow@fbihome.de> | 2019-05-11 11:49:21 +0000 |
---|---|---|
committer | Jan-Marek Glogowski <glogow@fbihome.de> | 2019-05-13 15:43:17 +0200 |
commit | c34bb163c38cfa893d1b5b0124ab9c5929dff16c (patch) | |
tree | 8994582e896495c8fe919e7a26c2852f9d120ec2 /vcl/source/bitmap | |
parent | 0725e8a5d9add88b1289f5b1cb90b0b43059a734 (diff) |
Make BitmapColor inherit from / merge into Color
BitmapColor itself is kept to distingish the Color usage as part
of a color palette, which continues to store the offset in the
blue value. The original special mbIndex handling is long gone
since commit 1fefdd6f3b41 ("Alpha channel in BitmapColor - change
bIndex to alpha"), so there is no data difference.
This also results in the following changes:
* now has a basic_ostream<charT, traits>& operator<<
(that was my actual starting point... for an other bug fix)
* there is a minimal difference for GetLiminance
BGR(29,151,76) => BGR(28,151,77)
* no more return values for Merge and Invert
(previously returning *this)
* replaces all GetBlueOrIndex with GetIndex
This leaves one "problematic" part: the GetColorError handling.
At first glance it should probably be virtual. The Color variant
is less strict then the BitmapColor one - for whatever reason.
BitmapColor is always used to search for the best match in a
Palette. Currently I'm simply leaving both variants. Would be
nice to have an explict for functions here.
Change-Id: I251ba3024a1d60f2a9d9fde9cd0a60f08e8322a7
Reviewed-on: https://gerrit.libreoffice.org/72181
Tested-by: Jenkins
Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
Reviewed-by: Jan-Marek Glogowski <glogow@fbihome.de>
Diffstat (limited to 'vcl/source/bitmap')
-rw-r--r-- | vcl/source/bitmap/BitmapLightenFilter.cxx | 3 | ||||
-rw-r--r-- | vcl/source/bitmap/BitmapSolarizeFilter.cxx | 8 | ||||
-rw-r--r-- | vcl/source/bitmap/BitmapTools.cxx | 10 | ||||
-rw-r--r-- | vcl/source/bitmap/bitmappaint.cxx | 19 |
4 files changed, 22 insertions, 18 deletions
diff --git a/vcl/source/bitmap/BitmapLightenFilter.cxx b/vcl/source/bitmap/BitmapLightenFilter.cxx index 52e41ae33e97..45013b143783 100644 --- a/vcl/source/bitmap/BitmapLightenFilter.cxx +++ b/vcl/source/bitmap/BitmapLightenFilter.cxx @@ -37,7 +37,8 @@ BitmapEx BitmapLightenFilter::execute(BitmapEx const& rBitmapEx) const = pRead->HasPalette() ? pRead->GetPaletteColor(pRead->GetIndexFromData(pScanlineRead, nX)) : pRead->GetPixelFromData(pScanlineRead, nX); - basegfx::BColor aBColor(aBmpColor.Invert().GetColor().getBColor()); + aBmpColor.Invert(); + basegfx::BColor aBColor(aBmpColor.getBColor()); aBColor = basegfx::utils::rgb2hsl(aBColor); double fHue = aBColor.getRed(); diff --git a/vcl/source/bitmap/BitmapSolarizeFilter.cxx b/vcl/source/bitmap/BitmapSolarizeFilter.cxx index d12986c81c9f..179868aa5e2d 100644 --- a/vcl/source/bitmap/BitmapSolarizeFilter.cxx +++ b/vcl/source/bitmap/BitmapSolarizeFilter.cxx @@ -32,7 +32,8 @@ BitmapEx BitmapSolarizeFilter::execute(BitmapEx const& rBitmapEx) const if (rPal[i].GetLuminance() >= mcSolarGreyThreshold) { BitmapColor aCol(rPal[i]); - pWriteAcc->SetPaletteColor(i, aCol.Invert()); + aCol.Invert(); + pWriteAcc->SetPaletteColor(i, aCol); } } } @@ -50,7 +51,10 @@ BitmapEx BitmapSolarizeFilter::execute(BitmapEx const& rBitmapEx) const aCol = pWriteAcc->GetPixelFromData(pScanline, nX); if (aCol.GetLuminance() >= mcSolarGreyThreshold) - pWriteAcc->SetPixelOnData(pScanline, nX, aCol.Invert()); + { + aCol.Invert(); + pWriteAcc->SetPixelOnData(pScanline, nX, aCol); + } } } } diff --git a/vcl/source/bitmap/BitmapTools.cxx b/vcl/source/bitmap/BitmapTools.cxx index 380d46a7f7f7..531a49bc9cc5 100644 --- a/vcl/source/bitmap/BitmapTools.cxx +++ b/vcl/source/bitmap/BitmapTools.cxx @@ -675,7 +675,7 @@ static bool readAlpha( BitmapReadAccess const * pAlphaReadAcc, long nY, const lo BitmapColor const& rColor( pAlphaReadAcc->GetPaletteColor(*pReadScan)); pReadScan++; - nAlpha = data[ nOff ] = 255 - rColor.GetBlueOrIndex(); + nAlpha = data[ nOff ] = 255 - rColor.GetIndex(); if( nAlpha != 255 ) bIsAlpha = true; nOff += 4; @@ -747,7 +747,7 @@ void CanvasCairoExtractBitmapData( BitmapEx const & aBmpEx, Bitmap & aBitmap, un else nAlpha = data[ nOff + 3 ] = 255; #endif - aColor = pBitmapReadAcc->GetPaletteColor(*pReadScan++).GetColor(); + aColor = pBitmapReadAcc->GetPaletteColor(*pReadScan++); #ifdef OSL_BIGENDIAN data[ nOff++ ] = premultiply_table[nAlpha][aColor.GetRed()]; @@ -888,7 +888,7 @@ void CanvasCairoExtractBitmapData( BitmapEx const & aBmpEx, Bitmap & aBitmap, un for( nX = 0; nX < nWidth; nX++ ) { - aColor = pBitmapReadAcc->GetColor( nY, nX ).GetColor(); + aColor = pBitmapReadAcc->GetColor( nY, nX ); // cairo need premultiplied color values // TODO(rodo) handle endianness @@ -1025,8 +1025,8 @@ void CanvasCairoExtractBitmapData( BitmapEx const & aBmpEx, Bitmap & aBitmap, un // #i123564# background and foreground were exchanged; of course // rPalette[0] is the background color - o_rFront = rPalette[1].GetColor(); - o_rBack = rPalette[0].GetColor(); + o_rFront = rPalette[1]; + o_rBack = rPalette[0]; bRet = true; } diff --git a/vcl/source/bitmap/bitmappaint.cxx b/vcl/source/bitmap/bitmappaint.cxx index 02df3c8a6b29..04b301d47d89 100644 --- a/vcl/source/bitmap/bitmappaint.cxx +++ b/vcl/source/bitmap/bitmappaint.cxx @@ -140,8 +140,9 @@ bool Bitmap::Invert() Scanline pScanline = pAcc->GetScanline(nY); for (long nX = 0; nX < nWidth; nX++) { - pAcc->SetPixelOnData(pScanline, nX, - pAcc->GetPixelFromData(pScanline, nX).Invert()); + BitmapColor aBmpColor = pAcc->GetPixelFromData(pScanline, nX); + aBmpColor.Invert(); + pAcc->SetPixelOnData(pScanline, nX, aBmpColor); } } } @@ -830,9 +831,8 @@ bool Bitmap::Replace(const AlphaMask& rAlpha, const Color& rMergeColor) for (long nX = 0; nX < nWidth; nX++) { aCol = pAcc->GetColor(nY, nX); - pNewAcc->SetPixelOnData( - pScanline, nX, - aCol.Merge(rMergeColor, 255 - pAlphaAcc->GetIndexFromData(pScanlineAlpha, nX))); + aCol.Merge(rMergeColor, 255 - pAlphaAcc->GetIndexFromData(pScanlineAlpha, nX)); + pNewAcc->SetPixelOnData(pScanline, nX, aCol); } } @@ -1132,11 +1132,10 @@ bool Bitmap::Blend(const AlphaMask& rAlpha, const Color& rBackgroundColor) Scanline pScanlineAlpha = pAlphaAcc->GetScanline(nY); for (long nX = 0; nX < nWidth; ++nX) { - pAcc->SetPixelOnData( - pScanline, nX, - pAcc->GetPixelFromData(pScanline, nX) - .Merge(rBackgroundColor, - 255 - pAlphaAcc->GetIndexFromData(pScanlineAlpha, nX))); + BitmapColor aBmpColor = pAcc->GetPixelFromData(pScanline, nX); + aBmpColor.Merge(rBackgroundColor, + 255 - pAlphaAcc->GetIndexFromData(pScanlineAlpha, nX)); + pAcc->SetPixelOnData(pScanline, nX, aBmpColor); } } |