summaryrefslogtreecommitdiff
path: root/vcl/source/bitmap
diff options
context:
space:
mode:
Diffstat (limited to 'vcl/source/bitmap')
-rw-r--r--vcl/source/bitmap/BitmapDisabledImageFilter.cxx78
1 files changed, 17 insertions, 61 deletions
diff --git a/vcl/source/bitmap/BitmapDisabledImageFilter.cxx b/vcl/source/bitmap/BitmapDisabledImageFilter.cxx
index 3529f7e67dc2..56f46b313159 100644
--- a/vcl/source/bitmap/BitmapDisabledImageFilter.cxx
+++ b/vcl/source/bitmap/BitmapDisabledImageFilter.cxx
@@ -24,82 +24,38 @@ BitmapEx BitmapDisabledImageFilter::execute(BitmapEx const& rBitmapEx) const
sal_uInt16 nBitCount = rBitmapEx.GetBitCount();
if (nBitCount < 8)
nBitCount = 8;
+
const BitmapPalette* pPal = nBitCount == 8 ? &Bitmap::GetGreyPalette(256) : nullptr;
Bitmap aGrey(aSize, nBitCount, pPal);
-
- AlphaMask aGreyAlpha(aSize);
-
- Bitmap aBitmap(rBitmapEx.GetBitmap());
- Bitmap::ScopedReadAccess pRead(aBitmap);
-
BitmapScopedWriteAccess pGrey(aGrey);
- AlphaScopedWriteAccess pGreyAlpha(aGreyAlpha);
BitmapEx aReturnBitmap;
-
- if (rBitmapEx.IsTransparent())
+ Bitmap aReadBitmap(rBitmapEx.GetBitmap());
+ Bitmap::ScopedReadAccess pRead(aReadBitmap);
+ if (pRead && pGrey)
{
- AlphaMask aBitmapAlpha(rBitmapEx.GetAlpha());
- AlphaMask::ScopedReadAccess pReadAlpha(aBitmapAlpha);
-
- if (pRead && pReadAlpha && pGrey && pGreyAlpha)
+ for (long nY = 0; nY < aSize.Height(); ++nY)
{
- BitmapColor aGreyAlphaValue(0);
+ Scanline pGreyScan = pGrey->GetScanline(nY);
+ Scanline pReadScan = pRead->GetScanline(nY);
- for (long nY = 0; nY < aSize.Height(); ++nY)
+ for (long nX = 0; nX < aSize.Width(); ++nX)
{
- 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->GetPixelFromData(pScanReadAlpha, nX));
-
- aGreyAlphaValue.SetIndex(
- sal_uInt8(std::min(aBitmapAlphaValue.GetIndex() + 178ul, 255ul)));
- pGreyAlpha->SetPixelOnData(pScanAlpha, nX, aGreyAlphaValue);
- }
+ // Get the luminance from RGB color and remap the value from 0-255 to 160-224
+ const BitmapColor aColor = pRead->GetPixelFromData(pReadScan, nX);
+ sal_uInt8 nLum(aColor.GetLuminance() / 4 + 160);
+ BitmapColor aGreyValue(nLum, nLum, nLum);
+ pGrey->SetPixelOnData(pGreyScan, nX, aGreyValue);
}
}
+ }
- pReadAlpha.reset();
- aReturnBitmap = BitmapEx(aGrey, aGreyAlpha);
+ if (rBitmapEx.IsTransparent())
+ {
+ aReturnBitmap = BitmapEx(aGrey, rBitmapEx.GetAlpha());
}
else
- {
- if (pRead && pGrey && pGreyAlpha)
- {
- BitmapColor aGreyAlphaValue(0);
-
- for (long nY = 0; nY < aSize.Height(); ++nY)
- {
- Scanline pScanAlpha = pGreyAlpha->GetScanline(nY);
- Scanline pScanline = pGrey->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);
-
- aGreyAlphaValue.SetIndex(128);
- pGreyAlpha->SetPixelOnData(pScanAlpha, nX, aGreyAlphaValue);
- }
- }
- }
-
aReturnBitmap = BitmapEx(aGrey);
- }
-
- pRead.reset();
- pGrey.reset();
- pGreyAlpha.reset();
return aReturnBitmap;
}