summaryrefslogtreecommitdiff
path: root/vcl/source/bitmap
diff options
context:
space:
mode:
authorJan-Marek Glogowski <glogow@fbihome.de>2019-05-11 11:49:21 +0000
committerJan-Marek Glogowski <glogow@fbihome.de>2019-05-13 15:43:17 +0200
commitc34bb163c38cfa893d1b5b0124ab9c5929dff16c (patch)
tree8994582e896495c8fe919e7a26c2852f9d120ec2 /vcl/source/bitmap
parent0725e8a5d9add88b1289f5b1cb90b0b43059a734 (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.cxx3
-rw-r--r--vcl/source/bitmap/BitmapSolarizeFilter.cxx8
-rw-r--r--vcl/source/bitmap/BitmapTools.cxx10
-rw-r--r--vcl/source/bitmap/bitmappaint.cxx19
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);
}
}