summaryrefslogtreecommitdiffstats
path: root/kdefx/kimageeffect.cpp
diff options
context:
space:
mode:
authortpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2011-08-15 08:41:49 +0000
committertpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2011-08-15 08:41:49 +0000
commit9a0fbb0a9655eff64fa2c2004dbf8f9d7a96b5b3 (patch)
tree10db24688050b256b5edf97020df6b92a593f8ad /kdefx/kimageeffect.cpp
parente436bd2166d6af00e96dc9a254bc4abac7f1eccf (diff)
downloadtdelibs-9a0fbb0a9655eff64fa2c2004dbf8f9d7a96b5b3.tar.gz
tdelibs-9a0fbb0a9655eff64fa2c2004dbf8f9d7a96b5b3.zip
Added convertToPremultipliedAlpha() to KImageEffect
Fixed "glowing icons" when 32 bit ARGB visuals are in use git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdelibs@1247329 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kdefx/kimageeffect.cpp')
-rw-r--r--kdefx/kimageeffect.cpp37
1 files changed, 37 insertions, 0 deletions
diff --git a/kdefx/kimageeffect.cpp b/kdefx/kimageeffect.cpp
index 4864bdfa6..8fac1f5cb 100644
--- a/kdefx/kimageeffect.cpp
+++ b/kdefx/kimageeffect.cpp
@@ -4937,3 +4937,40 @@ TQImage KImageEffect::bumpmap(TQImage &img, TQImage &map, double azimuth, double
}
return dst;
}
+
+/**
+ * Convert an image with standard alpha to premultiplied alpha
+ *
+ * @param img the image you want convert
+ *
+ * @return The destination image (dst) containing the result.
+ * @author Timothy Pearson <kb9vqf@pearsoncomputing.net>
+ */
+TQImage KImageEffect::convertToPremultipliedAlpha(TQImage input) {
+ TQImage alphaImage = input;
+ if (!alphaImage.isNull()) alphaImage = alphaImage.convertDepth( 32 );
+
+ int w = alphaImage.width();
+ int h = alphaImage.height();
+
+ register int r;
+ register int g;
+ register int b;
+ register int a;
+ register float alpha_adjust;
+ register TQRgb l;
+ TQRgb *ls;
+ for (int y = 0; y < h; ++y) {
+ ls = (TQRgb *)alphaImage.scanLine( y );
+ for (int x = 0; x < w; ++x) {
+ l = ls[x];
+ alpha_adjust = (tqAlpha( l )/255.0);
+ r = int( tqRed( l ) * alpha_adjust );
+ g = int( tqGreen( l ) * alpha_adjust );
+ b = int( tqBlue( l ) * alpha_adjust );
+ a = int( tqAlpha( l ) * 1.0 );
+ ls[x] = tqRgba( r, g, b, a );
+ }
+ }
+ return alphaImage;
+} \ No newline at end of file