2 * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
5 #include "evas_common.h"
6 #include "evas_convert_color.h"
10 evas_common_convert_argb_premul(DATA32 *data, unsigned int len)
12 DATA32 *de = data + len;
16 DATA32 a = 1 + (*data >> 24);
18 *data = (*data & 0xff000000) +
19 (((((*data) >> 8) & 0xff) * a) & 0xff00) +
20 (((((*data) & 0x00ff00ff) * a) >> 8) & 0x00ff00ff);
26 evas_common_convert_argb_unpremul(DATA32 *data, unsigned int len)
28 DATA32 *de = data + len;
32 DATA32 a = (*data >> 24);
34 if ((a > 0) && (a < 255))
36 (R_VAL(data) * 255) / a,
37 (G_VAL(data) * 255) / a,
38 (B_VAL(data) * 255) / a);
45 evas_common_convert_color_argb_premul(int a, int *r, int *g, int *b)
48 if (r) { *r = (a * *r) >> 8; }
49 if (g) { *g = (a * *g) >> 8; }
50 if (b) { *b = (a * *b) >> 8; }
54 evas_common_convert_color_argb_unpremul(int a, int *r, int *g, int *b)
57 if (r) { *r = (255 * *r) / a; }
58 if (g) { *g = (255 * *g) / a; }
59 if (b) { *b = (255 * *b) / a; }
63 evas_common_convert_color_hsv_to_rgb(float h, float s, float v, int *r, int *g, int *b)
88 if (r) *r = v - f; if (g) *g = v; if (b) *b = s;
91 if (r) *r = s; if (g) *g = v; if (b) *b = s + f;
94 if (r) *r = s; if (g) *g = v - f; if (b) *b = v;
97 if (r) *r = s + f; if (g) *g = s; if (b) *b = v;
100 if (r) *r = v; if (g) *g = s; if (b) *b = v - f;
103 if (r) *r = v; if (g) *g = s + f; if (b) *b = s;
109 evas_common_convert_color_rgb_to_hsv(int r, int g, int b, float *h, float *s, float *v)
111 int max, min, d = r - g;
113 //set min to MIN(g,r)
114 d = (d & (~(d >> 8)));
116 //set max to MAX(g,r)
119 //set min to MIN(b,min)
121 min -= (d & (~(d >> 8)));
123 //set max to MAX(max,b)
125 max += (d & (~(d >> 8)));
129 if (v) *v = (max / 255.0);
137 if (s) *s = (d / (float)max);
142 *h = 60 * ((g - b) / (float)d);
143 if (*h < 0) *h += 360;
151 *h = 120 + (60 * ((b - r) / (float)d));
152 if (*h < 0) *h += 360;
158 *h = 240 + (60 * ((r - g) / (float)d));
159 if (*h < 0) *h += 360;
164 evas_common_convert_color_hsv_to_rgb_int(int h, int s, int v, int *r, int *g, int *b)
183 *r = v - f; *g = v; *b = s;
186 *r = s; *g = v; *b = s + f;
189 *r = s; *g = v - f; *b = v;
192 *r = s + f; *g = s; *b = v;
195 *r = v; *g = s; *b = v - f;
198 *r = v; *g = s + f; *b = s;
204 evas_common_convert_color_rgb_to_hsv_int(int r, int g, int b, int *h, int *s, int *v)
206 int min, max, d = r - g;
208 d = (d & (~(d >> 8)));
213 min -= (d & (~(d >> 8)));
216 max += (d & (~(d >> 8)));
227 *s = ((d * 255) / max);
231 *h = (((g - b) * 255) / d);
232 if (*h < 0) *h += 1530;
237 *h = 510 + (((b - r) * 255) / d);
238 if (*h < 0) *h += 1530;
241 *h = 1020 + (((r - g) * 255) / d);
242 if (*h < 0) *h += 1530;