00001
00002 #include <qimage.h>
00003 #include <qpixmap.h>
00004 #include <qcolor.h>
00005
00006 #include "effects.h"
00007
00008
00009
00010 QImage & QImageEffect::fade (QImage & img, float val, const QColor & color)
00011 {
00012 if ( img. width ( ) == 0 || img. height ( ) == 0 )
00013 return img;
00014
00015
00016 if (img.depth () == 1)
00017 return img;
00018
00019 unsigned char
00020 tbl[256];
00021 for (int i = 0; i < 256; i++)
00022 tbl[i] = (int) (val * i + 0.5);
00023
00024 int
00025 red =
00026 color.
00027 red ();
00028 int
00029 green =
00030 color.
00031 green ();
00032 int
00033 blue =
00034 color.
00035 blue ();
00036
00037 QRgb col;
00038 int
00039 r,
00040 g,
00041 b,
00042 cr,
00043 cg,
00044 cb;
00045
00046 if (img.depth () <= 8)
00047 {
00048
00049 for (int i = 0; i < img.numColors (); i++)
00050 {
00051 col = img.color (i);
00052 cr = qRed (col);
00053 cg = qGreen (col);
00054 cb=qBlue(col);
00055 if (cr > red)
00056 r = cr - tbl[cr - red];
00057
00058 else
00059 r = cr + tbl[red - cr];
00060 if (cg > green)
00061 g = cg - tbl[cg - green];
00062
00063 else
00064 g = cg + tbl[green - cg];
00065 if (cb > blue)
00066 b = cb - tbl[cb - blue];
00067
00068 else
00069 b = cb + tbl[blue - cb];
00070 img.setColor (i, qRgb (r, g, b));
00071 }
00072
00073 }
00074 else
00075 {
00076
00077 for (int y = 0; y < img.height (); y++)
00078 {
00079 QRgb * data = (QRgb *) img.scanLine (y);
00080 for (int x = 0; x < img.width (); x++)
00081 {
00082 col = *data;
00083 cr = qRed (col);
00084 cg=qGreen(col);
00085 cb=qBlue(col);
00086 if (cr > red)
00087 r = cr - tbl[cr - red];
00088
00089 else
00090 r = cr + tbl[red - cr];
00091 if (cg > green)
00092 g = cg - tbl[cg - green];
00093
00094 else
00095 g = cg + tbl[green - cg];
00096 if (cb > blue)
00097 b = cb - tbl[cb - blue];
00098
00099 else
00100 b = cb + tbl[blue - cb];
00101 *data++ = qRgb (r, g, b);
00102 }
00103 }
00104 }
00105
00106 return img;
00107 }
00108
00109
00110
00111 QPixmap& QPixmapEffect::fade(QPixmap &pixmap, float val, const QColor &color)
00112 {
00113 QImage img = pixmap.convertToImage();
00114 QImageEffect::fade(img, val, color);
00115 pixmap.convertFromImage(img);
00116
00117 return pixmap;
00118 }