-rw-r--r-- | libopie2/opieui/oimageeffect.cpp | 76 |
1 files changed, 25 insertions, 51 deletions
diff --git a/libopie2/opieui/oimageeffect.cpp b/libopie2/opieui/oimageeffect.cpp index 3c28bbe..2855da6 100644 --- a/libopie2/opieui/oimageeffect.cpp +++ b/libopie2/opieui/oimageeffect.cpp @@ -55,27 +55,25 @@ inline unsigned int intensityValue(unsigned int color) // //====================================================================== QImage OImageEffect::gradient(const QSize &size, const QColor &ca, const QColor &cb, GradientType eff, int ncols) { int rDiff, gDiff, bDiff; int rca, gca, bca, rcb, gcb, bcb; QImage image(size, 32); if (size.width() == 0 || size.height() == 0) { -#ifndef NDEBUG - cerr << "WARNING: OImageEffect::gradient: invalid image" << endl; -#endif + qDebug( "WARNING: OImageEffect::gradient: invalid image" ); return image; } register int x, y; rDiff = (rcb = cb.red()) - (rca = ca.red()); gDiff = (gcb = cb.green()) - (gca = ca.green()); bDiff = (bcb = cb.blue()) - (bca = ca.blue()); if( eff == VerticalGradient || eff == HorizontalGradient ){ uint *p; @@ -343,27 +341,25 @@ QImage OImageEffect::unbalancedGradient(const QSize &size, const QColor &ca, // float xbal = xfactor/5000.; // float ybal = yfactor/5000.; float xbal = xfactor/30./size.width(); float ybal = yfactor/30./size.height(); float rat; int rDiff, gDiff, bDiff; int rca, gca, bca, rcb, gcb, bcb; QImage image(size, 32); if (size.width() == 0 || size.height() == 0) { -#ifndef NDEBUG - cerr << "WARNING: OImageEffect::unbalancedGradient : invalid image\n"; -#endif + qDebug( "WARNING: OImageEffect::unbalancedGradient : invalid image" ); return image; } register int x, y; unsigned int *scanline; rDiff = (rcb = cb.red()) - (rca = ca.red()); gDiff = (gcb = cb.green()) - (gca = ca.green()); bDiff = (bcb = cb.blue()) - (bca = ca.blue()); if( eff == VerticalGradient || eff == HorizontalGradient){ QColor cRow; @@ -564,27 +560,25 @@ QImage OImageEffect::unbalancedGradient(const QSize &size, const QColor &ca, /* This builds a 256 byte unsigned char lookup table with all * the possible percent values prior to applying the effect, then uses * integer math for the pixels. For any image larger than 9x9 this will be * less expensive than doing a float operation on the 3 color components of * each pixel. (mosfet) */ QImage& OImageEffect::intensity(QImage &image, float percent) { if (image.width() == 0 || image.height() == 0) { -#ifndef NDEBUG - cerr << "WARNING: OImageEffect::intensity : invalid image\n"; -#endif + qDebug( "WARNING: OImageEffect::intensity : invalid image" ); return image; } int segColors = image.depth() > 8 ? 256 : image.numColors(); unsigned char *segTbl = new unsigned char[segColors]; int pixels = image.depth() > 8 ? image.width()*image.height() : image.numColors(); unsigned int *data = image.depth() > 8 ? (unsigned int *)image.bits() : (unsigned int *)image.colorTable(); bool brighten = (percent >= 0); if(percent < 0) @@ -631,27 +625,25 @@ QImage& OImageEffect::intensity(QImage &image, float percent) data[i] = qRgba(r, g, b, a); } } delete [] segTbl; return image; } QImage& OImageEffect::channelIntensity(QImage &image, float percent, RGBComponent channel) { if (image.width() == 0 || image.height() == 0) { -#ifndef NDEBUG - cerr << "WARNING: OImageEffect::channelIntensity : invalid image\n"; -#endif + qDebug( "WARNING: OImageEffect::channelIntensity : invalid image" ); return image; } int segColors = image.depth() > 8 ? 256 : image.numColors(); unsigned char *segTbl = new unsigned char[segColors]; int pixels = image.depth() > 8 ? image.width()*image.height() : image.numColors(); unsigned int *data = image.depth() > 8 ? (unsigned int *)image.bits() : (unsigned int *)image.colorTable(); bool brighten = (percent >= 0); if(percent < 0) percent = -percent; @@ -723,28 +715,26 @@ QImage& OImageEffect::channelIntensity(QImage &image, float percent, delete [] segTbl; return image; } // Modulate an image with an RBG channel of another image // QImage& OImageEffect::modulate(QImage &image, QImage &modImage, bool reverse, ModulationType type, int factor, RGBComponent channel) { if (image.width() == 0 || image.height() == 0 || modImage.width() == 0 || modImage.height() == 0) { -#ifndef NDEBUG - cerr << "WARNING: OImageEffect::modulate : invalid image\n"; -#endif - return image; + qDebug( "WARNING: OImageEffect::modulate : invalid image" ); + return image; } int r, g, b, h, s, v, a; QColor clr; int mod=0; unsigned int x1, x2, y1, y2; register int x, y; // for image, we handle only depth 32 if (image.depth()<32) image = image.convertDepth(32); // for modImage, we handle depth 8 and 32 @@ -851,36 +841,34 @@ QImage& OImageEffect::modulate(QImage &image, QImage &modImage, bool reverse, //====================================================================== // // Blend effects // //====================================================================== // Nice and fast direct pixel manipulation QImage& OImageEffect::blend(const QColor& clr, QImage& dst, float opacity) { if (dst.width() <= 0 || dst.height() <= 0) - return dst; + return dst; if (opacity < 0.0 || opacity > 1.0) { -#ifndef NDEBUG - cerr << "WARNING: OImageEffect::blend : invalid opacity. Range [0, 1]\n"; -#endif - return dst; + qDebug( "WARNING: OImageEffect::blend : invalid opacity. Range [0, 1] "); + return dst; } int depth = dst.depth(); if (depth != 32) - dst = dst.convertDepth(32); + dst = dst.convertDepth(32); int pixels = dst.width() * dst.height(); int rcol, gcol, bcol; clr.rgb(&rcol, &gcol, &bcol); #ifdef WORDS_BIGENDIAN // ARGB (skip alpha) register unsigned char *data = (unsigned char *)dst.bits() + 1; #else // BGRA register unsigned char *data = (unsigned char *)dst.bits(); #endif for (register int i=0; i<pixels; i++) @@ -894,40 +882,36 @@ QImage& OImageEffect::blend(const QColor& clr, QImage& dst, float opacity) *(data++) += (unsigned char)((gcol - *data) * opacity); *(data++) += (unsigned char)((rcol - *data) * opacity); #endif data++; // skip alpha } return dst; } // Nice and fast direct pixel manipulation QImage& OImageEffect::blend(QImage& src, QImage& dst, float opacity) { if (src.width() <= 0 || src.height() <= 0) - return dst; + return dst; if (dst.width() <= 0 || dst.height() <= 0) - return dst; + return dst; if (src.width() != dst.width() || src.height() != dst.height()) { -#ifndef NDEBUG - cerr << "WARNING: OImageEffect::blend : src and destination images are not the same size\n"; -#endif - return dst; + qDebug( "WARNING: OImageEffect::blend : src and destination images are not the same size" ); + return dst; } if (opacity < 0.0 || opacity > 1.0) { -#ifndef NDEBUG - cerr << "WARNING: OImageEffect::blend : invalid opacity. Range [0, 1]\n"; -#endif - return dst; + qDebug( "WARNING: OImageEffect::blend : invalid opacity. Range [0, 1]" ); + return dst; } if (src.depth() != 32) src = src.convertDepth(32); if (dst.depth() != 32) dst = dst.convertDepth(32); int pixels = src.width() * src.height(); #ifdef WORDS_BIGENDIAN // ARGB (skip alpha) register unsigned char *data1 = (unsigned char *)dst.bits() + 1; register unsigned char *data2 = (unsigned char *)src.bits() + 1; #else // BGRA register unsigned char *data1 = (unsigned char *)dst.bits(); register unsigned char *data2 = (unsigned char *)src.bits(); @@ -948,28 +932,26 @@ QImage& OImageEffect::blend(QImage& src, QImage& dst, float opacity) data2++; } return dst; } QImage& OImageEffect::blend(QImage &image, float initial_intensity, const QColor &bgnd, GradientType eff, bool anti_dir) { if (image.width() == 0 || image.height() == 0 || image.depth()!=32 ) { -#ifndef NDEBUG - cerr << "WARNING: OImageEffect::blend : invalid image\n"; -#endif - return image; + qDebug( "WARNING: OImageEffect::blend : invalid image" ); + return image; } int r_bgnd = bgnd.red(), g_bgnd = bgnd.green(), b_bgnd = bgnd.blue(); int r, g, b; int ind; unsigned int xi, xf, yi, yf; unsigned int a; // check the boundaries of the initial intesity param float unaffected = 1; if (initial_intensity > 1) initial_intensity = 1; @@ -1143,27 +1125,25 @@ QImage& OImageEffect::blend(QImage &image, float initial_intensity, g = qGreen(data[ind]) + (int)(intensity * (g_bgnd - qGreen(data[ind]))); b = qBlue (data[ind]) + (int)(intensity * (b_bgnd - qBlue (data[ind]))); if (r > 255) r = 255; if (r < 0 ) r = 0; if (g > 255) g = 255; if (g < 0 ) g = 0; if (b > 255) b = 255; if (b < 0 ) b = 0; a = qAlpha(data[ind]); data[ind] = qRgba(r, g, b, a); } } } -#ifndef NDEBUG - else cerr << "OImageEffect::blend effect not implemented" << endl; -#endif + else qDebug( "OImageEffect::blend effect not implemented" ); return image; } // Not very efficient as we create a third big image... // QImage& OImageEffect::blend(QImage &image1, QImage &image2, GradientType gt, int xf, int yf) { if (image1.width() == 0 || image1.height() == 0 || image2.width() == 0 || image2.height() == 0) return image1; @@ -1175,28 +1155,26 @@ QImage& OImageEffect::blend(QImage &image1, QImage &image2, return blend(image1,image2,image3, Red); // Channel to use is arbitrary } // Blend image2 into image1, using an RBG channel of blendImage // QImage& OImageEffect::blend(QImage &image1, QImage &image2, QImage &blendImage, RGBComponent channel) { if (image1.width() == 0 || image1.height() == 0 || image2.width() == 0 || image2.height() == 0 || blendImage.width() == 0 || blendImage.height() == 0) { -#ifndef NDEBUG - cerr << "OImageEffect::blend effect invalid image" << endl; -#endif - return image1; + qDebug( "OImageEffect::blend effect invalid image" ); + return image1; } int r, g, b; int ind1, ind2, ind3; unsigned int x1, x2, x3, y1, y2, y3; unsigned int a; register int x, y; // for image1 and image2, we only handle depth 32 if (image1.depth()<32) image1 = image1.convertDepth(32); @@ -1275,28 +1253,26 @@ unsigned int OImageEffect::uHash(unsigned int c) ng = g + (g >> 3); ng = ng < g ? ~0 : ng; nb = b + (b >> 3); nb = nb < b ? ~0 : nb; return qRgba(nr, ng, nb, a); } // ----------------------------------------------------------------------------- QImage& OImageEffect::hash(QImage &image, Lighting lite, unsigned int spacing) { if (image.width() == 0 || image.height() == 0) { -#ifndef NDEBUG - cerr << "OImageEffect::hash effect invalid image" << endl; -#endif - return image; + qDebug( "OImageEffect::hash effect invalid image" ); + return image; } register int x, y; unsigned int *data = (unsigned int *)image.bits(); unsigned int ind; //CT no need to do it if not enough space if ((lite == NorthLite || lite == SouthLite)&& (unsigned)image.height() < 2+spacing) return image; if ((lite == EastLite || lite == WestLite)&& @@ -1785,28 +1761,26 @@ bool OImageEffect::blend( const QImage & upper, const QImage & lower, QImage & output ) { if ( upper.width() > lower.width() || upper.height() > lower.height() || upper.depth() != 32 || lower.depth() != 32 ) { -#ifndef NDEBUG - cerr << "OImageEffect::blend : Sizes not correct\n" ; -#endif - return false; + qDebug( "OImageEffect::blend : Sizes not correct" ); + return false; } output = lower.copy(); register uchar *i, *o; register int a; register int col; register int w = upper.width(); int row(upper.height() - 1); do { |