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 | |
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
-rw-r--r-- | kdecore/kiconloader.cpp | 5 | ||||
-rw-r--r-- | kdefx/kimageeffect.cpp | 37 | ||||
-rw-r--r-- | kdefx/kimageeffect.h | 10 |
3 files changed, 51 insertions, 1 deletions
diff --git a/kdecore/kiconloader.cpp b/kdecore/kiconloader.cpp index bd1ad3a91..62950e5d8 100644 --- a/kdecore/kiconloader.cpp +++ b/kdecore/kiconloader.cpp @@ -51,6 +51,8 @@ #include "svgicons/ksvgiconpainter.h" #endif +#include <kimageeffect.h> + #include "kiconloader_p.h" /*** KIconThemeNode: A node in the icon theme dependancy tree. ***/ @@ -855,7 +857,8 @@ TQPixmap KIconLoader::loadIcon(const TQString& _name, KIcon::Group group, int si } } - pix.convertFromImage(*img); + if (TQPaintDevice::x11AppDepth() == 32) pix.convertFromImage(KImageEffect::convertToPremultipliedAlpha( *img )); + else pix.convertFromImage(*img); delete img; 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 diff --git a/kdefx/kimageeffect.h b/kdefx/kimageeffect.h index 155df71b1..8d73e5bfb 100644 --- a/kdefx/kimageeffect.h +++ b/kdefx/kimageeffect.h @@ -773,6 +773,16 @@ public: int ambient, bool compensate, bool invert, BumpmapType type, bool tiled); + /** + * 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> + */ + static TQImage convertToPremultipliedAlpha(TQImage input); + private: /** |