1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
#include <qimage.h>
#include <qpixmap.h>
#include <qcolor.h>
#include "effects.h"
QImage & QImageEffect::fade (QImage & img, float val, const QColor & color)
{
if ( img. width ( ) == 0 || img. height ( ) == 0 )
return img;
// We don't handle bitmaps
if (img.depth () == 1)
return img;
unsigned char
tbl[256];
for (int i = 0; i < 256; i++)
tbl[i] = (int) (val * i + 0.5);
int
red =
color.
red ();
int
green =
color.
green ();
int
blue =
color.
blue ();
QRgb col;
int
r,
g,
b,
cr,
cg,
cb;
if (img.depth () <= 8)
{
// pseudo color
for (int i = 0; i < img.numColors (); i++)
{
col = img.color (i);
cr = qRed (col);
cg = qGreen (col);
cb=qBlue(col);
if (cr > red)
r = cr - tbl[cr - red];
else
r = cr + tbl[red - cr];
if (cg > green)
g = cg - tbl[cg - green];
else
g = cg + tbl[green - cg];
if (cb > blue)
b = cb - tbl[cb - blue];
else
b = cb + tbl[blue - cb];
img.setColor (i, qRgb (r, g, b));
}
}
else
{
// truecolor
for (int y = 0; y < img.height (); y++)
{
QRgb * data = (QRgb *) img.scanLine (y);
for (int x = 0; x < img.width (); x++)
{
col = *data;
cr = qRed (col);
cg=qGreen(col);
cb=qBlue(col);
if (cr > red)
r = cr - tbl[cr - red];
else
r = cr + tbl[red - cr];
if (cg > green)
g = cg - tbl[cg - green];
else
g = cg + tbl[green - cg];
if (cb > blue)
b = cb - tbl[cb - blue];
else
b = cb + tbl[blue - cb];
*data++ = qRgb (r, g, b);
}
}
}
return img;
}
QPixmap& QPixmapEffect::fade(QPixmap &pixmap, float val, const QColor &color)
{
QImage img = pixmap.convertToImage();
QImageEffect::fade(img, val, color);
pixmap.convertFromImage(img);
return pixmap;
}
|