summaryrefslogtreecommitdiff
path: root/vcl/source/bitmap
diff options
context:
space:
mode:
authorTomaž Vajngerl <tomaz.vajngerl@collabora.com>2015-11-22 17:55:39 +0100
committerTomaž Vajngerl <tomaz.vajngerl@collabora.com>2015-11-23 13:59:24 +0100
commit15f66df8602b0920266ff2be86873246da4fda31 (patch)
treec3d24a67cd2e469cf77a46333688396871f55863 /vcl/source/bitmap
parentf1592d3821a2ab69d2ddd27095696a39082bc24d (diff)
vcl: Bitmap processor to create a disabled image
Change-Id: Iba5d86988736fa28329e1ba2783dfb15e37815a8
Diffstat (limited to 'vcl/source/bitmap')
-rw-r--r--vcl/source/bitmap/BitmapProcessor.cxx72
1 files changed, 72 insertions, 0 deletions
diff --git a/vcl/source/bitmap/BitmapProcessor.cxx b/vcl/source/bitmap/BitmapProcessor.cxx
index a82e35060ff7..5ac46804e103 100644
--- a/vcl/source/bitmap/BitmapProcessor.cxx
+++ b/vcl/source/bitmap/BitmapProcessor.cxx
@@ -55,4 +55,76 @@ BitmapEx BitmapProcessor::createLightImage(const BitmapEx& rBitmapEx)
return BitmapEx(aDarkBitmap, rBitmapEx.GetAlpha());
}
+BitmapEx BitmapProcessor::createDisabledImage(const BitmapEx& rBitmapEx)
+{
+ const Size aSize(rBitmapEx.GetSizePixel());
+
+ Bitmap aGrey(aSize, 8, &Bitmap::GetGreyPalette(256));
+ AlphaMask aGreyAlpha(aSize);
+
+ Bitmap aBitmap(rBitmapEx.GetBitmap());
+ BitmapReadAccess* pRead(aBitmap.AcquireReadAccess());
+
+ BitmapWriteAccess* pGrey(aGrey.AcquireWriteAccess());
+ BitmapWriteAccess* pGreyAlpha(aGreyAlpha.AcquireWriteAccess());
+
+ BitmapEx aReturnBitmap;
+
+ if (rBitmapEx.IsTransparent())
+ {
+ AlphaMask aBitmapAlpha(rBitmapEx.GetAlpha());
+ BitmapReadAccess* pReadAlpha(aBitmapAlpha.AcquireReadAccess());
+
+ if (pRead && pReadAlpha && pGrey && pGreyAlpha)
+ {
+ BitmapColor aGreyValue(0);
+ BitmapColor aGreyAlphaValue(0);
+
+ for (int nY = 0; nY < aSize.Height(); ++nY)
+ {
+ for (int nX = 0; nX < aSize.Width(); ++nX)
+ {
+ aGreyValue.SetIndex(pRead->GetLuminance(nY, nX));
+ pGrey->SetPixel(nY, nX, aGreyValue);
+
+ const BitmapColor aBitmapAlphaValue(pReadAlpha->GetPixel(nY, nX));
+
+ aGreyAlphaValue.SetIndex(sal_uInt8(std::min(aBitmapAlphaValue.GetIndex() + 178ul, 255ul)));
+ pGreyAlpha->SetPixel(nY, nX, aGreyAlphaValue);
+ }
+ }
+ }
+ aBitmapAlpha.ReleaseAccess(pReadAlpha);
+ aReturnBitmap = BitmapEx(aGrey, aGreyAlpha);
+ }
+ else
+ {
+ if (pRead && pGrey && pGreyAlpha)
+ {
+ BitmapColor aGreyValue(0);
+ BitmapColor aGreyAlphaValue(0);
+
+ for (int nY = 0; nY < aSize.Height(); ++nY)
+ {
+ for (int nX = 0; nX < aSize.Width(); ++nX)
+ {
+ aGreyValue.SetIndex(pRead->GetLuminance(nY, nX));
+ pGrey->SetPixel(nY, nX, aGreyValue);
+
+ aGreyAlphaValue.SetIndex(128);
+ pGreyAlpha->SetPixel(nY, nX, aGreyAlphaValue);
+ }
+ }
+ }
+ aReturnBitmap = BitmapEx(aGrey);
+ }
+
+ Bitmap::ReleaseAccess(pRead);
+
+ Bitmap::ReleaseAccess(pGrey);
+ aGreyAlpha.ReleaseAccess(pGreyAlpha);
+
+ return aReturnBitmap;
+}
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */