Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

effects.cpp

Go to the documentation of this file.
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 // We don't handle bitmaps
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                                 // pseudo color
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                                 // truecolor
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 }

Generated on Sat Nov 5 16:17:58 2005 for OPIE by  doxygen 1.4.2