diff options
author | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2011-08-15 08:41:49 +0000 |
---|---|---|
committer | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2011-08-15 08:41:49 +0000 |
commit | 9a0fbb0a9655eff64fa2c2004dbf8f9d7a96b5b3 (patch) | |
tree | 10db24688050b256b5edf97020df6b92a593f8ad /kdefx/kimageeffect.cpp | |
parent | e436bd2166d6af00e96dc9a254bc4abac7f1eccf (diff) | |
download | tdelibs-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.cpp | 37 |
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 |