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
v3.5.13-sru
tpearson 13 years ago
parent e436bd2166
commit 9a0fbb0a96

@ -51,6 +51,8 @@
#include "svgicons/ksvgiconpainter.h" #include "svgicons/ksvgiconpainter.h"
#endif #endif
#include <kimageeffect.h>
#include "kiconloader_p.h" #include "kiconloader_p.h"
/*** KIconThemeNode: A node in the icon theme dependancy tree. ***/ /*** 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; delete img;

@ -4937,3 +4937,40 @@ TQImage KImageEffect::bumpmap(TQImage &img, TQImage &map, double azimuth, double
} }
return dst; 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;
}

@ -773,6 +773,16 @@ public:
int ambient, bool compensate, bool invert, int ambient, bool compensate, bool invert,
BumpmapType type, bool tiled); 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: private:
/** /**

Loading…
Cancel
Save