43 m_params.argb.alpha = (
unsigned short)(color.
getAlpha() * 0x101);
44 m_params.argb.red = (
unsigned short)(color.
getRed() * 0x101);
45 m_params.argb.green = (
unsigned short)(color.
getGreen() * 0x101);
46 m_params.argb.blue = (
unsigned short)(color.
getBlue() * 0x101);
47 m_params.argb.pad = 0;
53 m_params.argb.alpha = (
unsigned short)(((rgba >> 24) & 0xFF) * 0x101);
54 m_params.argb.red = (
unsigned short)(((rgba >> 16) & 0xFF) * 0x101);
55 m_params.argb.green = (
unsigned short)(((rgba >> 8) & 0xFF) * 0x101);
56 m_params.argb.blue = (
unsigned short)((rgba & 0xFF) * 0x101);
57 m_params.argb.pad = 0;
63 m_params.argb.alpha = (
unsigned short)(a * 0x101);
64 m_params.argb.red = (
unsigned short)(r * 0x101);
65 m_params.argb.green = (
unsigned short)(g * 0x101);
66 m_params.argb.blue = (
unsigned short)(b * 0x101);
67 m_params.argb.pad = 0;
85 m_params.argb.alpha = (
unsigned short)(a * 0x101);
86 m_params.argb.red = (
unsigned short)(r * 0x101);
87 m_params.argb.green = (
unsigned short)(g * 0x101);
88 m_params.argb.blue = (
unsigned short)(b * 0x101);
89 m_params.argb.pad = 0;
94 int a = (rgba >> 24) & 0xff;
95 int r = (rgba >> 16) & 0xff;
96 int g = (rgba >> 8) & 0xff;
111 if (m_spec != Invalid && m_spec != Rgb)
113 toRgb().getRgba(r, g, b, a);
117 *r = m_params.argb.red >> 8;
118 *g = m_params.argb.green >> 8;
119 *b = m_params.argb.blue >> 8;
122 *a = m_params.argb.alpha >> 8;
129 getRgba(&r, &g, &b, &a);
131 int rgba = (a << 24) + (r << 16) + (g << 8) + b;
143 if (m_spec != Invalid && m_spec != Rgb)
144 return toRgb().getRed();
145 return m_params.argb.red >> 8;
150 if (m_spec != Invalid && m_spec != Rgb)
151 return toRgb().getGreen();
152 return m_params.argb.green >> 8;
157 if (m_spec != Invalid && m_spec != Rgb)
158 return toRgb().getBlue();
159 return m_params.argb.blue >> 8;
164 return m_params.argb.alpha >> 8;
170 setRgba(red, getGreen(), getBlue(), getAlpha());
172 m_params.argb.red = (
unsigned short)(red * 0x101);
178 setRgba(getRed(), green, getBlue(), getAlpha());
180 m_params.argb.green = (
unsigned short)(green * 0x101);
186 setRgba(getRed(), getGreen(), blue, getAlpha());
188 m_params.argb.blue = (
unsigned short)(blue * 0x101);
193 m_params.argb.alpha = (
unsigned short)(alpha * 0x101);
198 if (!isValid() || m_spec == Rgb)
210 if (m_params.ahsv.saturation == 0 || m_params.ahsv.hue == USHRT_MAX)
218 const double h = m_params.ahsv.hue == 36000 ? 0 : m_params.ahsv.hue / 6000.;
219 const double s = m_params.ahsv.saturation / double(USHRT_MAX);
220 const double v = m_params.ahsv.value / double(USHRT_MAX);
221 const int i = int(h);
222 const double f = h - i;
223 const double p = v * (1.0 - s);
227 const double q = v * (1.0 - (s * f));
232 colt.
m_params.
argb.red = (
unsigned short)(round(q * USHRT_MAX));
233 colt.
m_params.
argb.green = (
unsigned short)(round(v * USHRT_MAX));
234 colt.
m_params.
argb.blue = (
unsigned short)(round(p * USHRT_MAX));
237 colt.
m_params.
argb.red = (
unsigned short)(round(p * USHRT_MAX));
238 colt.
m_params.
argb.green = (
unsigned short)(round(q * USHRT_MAX));
239 colt.
m_params.
argb.blue = (
unsigned short)(round(v * USHRT_MAX));
242 colt.
m_params.
argb.red = (
unsigned short)(round(v * USHRT_MAX));
243 colt.
m_params.
argb.green = (
unsigned short)(round(p * USHRT_MAX));
244 colt.
m_params.
argb.blue = (
unsigned short)(round(q * USHRT_MAX));
250 const double t = v * (1.0 - (s * (1.0 - f)));
255 colt.
m_params.
argb.red = (
unsigned short)(round(v * USHRT_MAX));
256 colt.
m_params.
argb.green = (
unsigned short)(round(t * USHRT_MAX));
257 colt.
m_params.
argb.blue = (
unsigned short)(round(p * USHRT_MAX));
260 colt.
m_params.
argb.red = (
unsigned short)(round(p * USHRT_MAX));
261 colt.
m_params.
argb.green = (
unsigned short)(round(v * USHRT_MAX));
262 colt.
m_params.
argb.blue = (
unsigned short)(round(t * USHRT_MAX));
265 colt.
m_params.
argb.red = (
unsigned short)(round(t * USHRT_MAX));
266 colt.
m_params.
argb.green = (
unsigned short)(round(p * USHRT_MAX));
267 colt.
m_params.
argb.blue = (
unsigned short)(round(v * USHRT_MAX));
275 if (m_params.ahsl.saturation == 0 || m_params.ahsl.hue == USHRT_MAX)
280 else if (m_params.ahsl.lightness == 0)
288 const double h = m_params.ahsl.hue == 36000 ? 0 : m_params.ahsl.hue / 36000.;
289 const double s = m_params.ahsl.saturation / double(USHRT_MAX);
290 const double l = m_params.ahsl.lightness / double(USHRT_MAX);
294 temp2 = l * (double(1.0) + s);
296 temp2 = l + s - (l * s);
298 const double temp1 = (double(2.0) * l) - temp2;
299 double temp3[3] = { h + (double(1.0) / double(3.0)), h, h - (
double(1.0) / double(3.0)) };
301 for (
int i = 0; i != 3; ++i)
303 if (temp3[i] <
double(0.0))
304 temp3[i] +=
double(1.0);
305 else if (temp3[i] >
double(1.0))
306 temp3[i] -=
double(1.0);
308 const double sixtemp3 = temp3[i] * double(6.0);
309 if (sixtemp3 <
double(1.0))
310 colt.
m_params.
array[i+1] = (
unsigned short)(round((temp1 + (temp2 - temp1) * sixtemp3) * USHRT_MAX));
311 else if ((temp3[i] *
double(2.0)) < double(1.0))
312 colt.
m_params.
array[i+1] = (
unsigned short)(round(temp2 * USHRT_MAX));
313 else if ((temp3[i] *
double(3.0)) < double(2.0))
314 colt.
m_params.
array[i+1] = (
unsigned short)(round((temp1 + (temp2 -temp1) * (
double(2.0) /
double(3.0) - temp3[i]) *
double(6.0)) * USHRT_MAX));
316 colt.
m_params.
array[i+1] = (
unsigned short)(round(temp1 * USHRT_MAX));
326 const double c = m_params.acmyk.cyan / double(USHRT_MAX);
327 const double m = m_params.acmyk.magenta / double(USHRT_MAX);
328 const double y = m_params.acmyk.yellow / double(USHRT_MAX);
329 const double k = m_params.acmyk.black / double(USHRT_MAX);
331 colt.
m_params.
argb.red = (
unsigned short)(round((1.0 - (c * (1.0 - k) + k)) * USHRT_MAX));
332 colt.
m_params.
argb.green = (
unsigned short)(round((1.0 - (m * (1.0 - k) + k)) * USHRT_MAX));
333 colt.
m_params.
argb.blue = (
unsigned short)(round((1.0 - (y * (1.0 - k) + k)) * USHRT_MAX));
343 #define MAX_3(a, b, c) ( ( a > b && a > c) ? a : (b > c ? b : c) )
344 #define MIN_3(a, b, c) ( ( a < b && a < c) ? a : (b < c ? b : c) )
348 if (!isValid() || m_spec == Hsv)
352 return toRgb().
toHsv();
359 const double r = m_params.argb.red / double(USHRT_MAX);
360 const double g = m_params.argb.green / double(USHRT_MAX);
361 const double b = m_params.argb.blue / double(USHRT_MAX);
362 const double max =
MAX_3(r, g, b);
363 const double min =
MIN_3(r, g, b);
364 const double delta = max - min;
365 colt.
m_params.
ahsv.value = (
unsigned short)(round(max * USHRT_MAX));
367 if (fuzzyIsNull(delta))
377 colt.
m_params.
ahsv.saturation = (
unsigned short)(round((delta / max) * USHRT_MAX));
378 if (fuzzyCompare(r, max))
380 hue = ((g - b) /delta);
382 else if (fuzzyCompare(g, max))
384 hue = (2.0 + (b - r) / delta);
386 else if (fuzzyCompare(b, max))
388 hue = (4.0 + (r - g) / delta);
398 colt.
m_params.
ahsv.hue = (
unsigned short)(round(hue * 100));
406 if (!isValid() || m_spec == Hsl)
410 return toRgb().
toHsl();
417 const double r = m_params.argb.red / double(USHRT_MAX);
418 const double g = m_params.argb.green / double(USHRT_MAX);
419 const double b = m_params.argb.blue / double(USHRT_MAX);
420 const double max =
MAX_3(r, g, b);
421 const double min =
MIN_3(r, g, b);
422 const double delta = max - min;
423 const double delta2 = max + min;
424 const double lightness = double(0.5) * delta2;
425 colt.
m_params.
ahsl.lightness = (
unsigned short)(round(lightness * USHRT_MAX));
427 if (fuzzyIsNull(delta))
437 if (lightness <
double(0.5))
438 colt.
m_params.
ahsl.saturation = (
unsigned short)(round((delta / delta2) * USHRT_MAX));
440 colt.
m_params.
ahsl.saturation = (
unsigned short)(round((delta / (
double(2.0) - delta2)) * USHRT_MAX));
442 if (fuzzyCompare(r, max))
444 hue = ((g - b) /delta);
446 else if (fuzzyCompare(g, max))
448 hue = (2.0 + (b - r) / delta);
450 else if (fuzzyCompare(b, max))
452 hue = (4.0 + (r - g) / delta);
462 colt.
m_params.
ahsl.hue = (
unsigned short)(round(hue * 100));
470 if (!isValid() || m_spec == Cmyk)
481 const double r = m_params.argb.red / double(USHRT_MAX);
482 const double g = m_params.argb.green / double(USHRT_MAX);
483 const double b = m_params.argb.blue / double(USHRT_MAX);
489 const double k = vMin(c, vMin(m, y));
491 if (!fuzzyIsNull(k - 1))
493 c = (c - k) / (1.0 - k);
494 m = (m - k) / (1.0 - k);
495 y = (y - k) / (1.0 - k);
498 colt.
m_params.
acmyk.cyan = (
unsigned short)(round(c * USHRT_MAX));
499 colt.
m_params.
acmyk.magenta = (
unsigned short)(round(m * USHRT_MAX));
500 colt.
m_params.
acmyk.yellow = (
unsigned short)(round(y * USHRT_MAX));
501 colt.
m_params.
acmyk.black = (
unsigned short)(round(k * USHRT_MAX));
508 if (m_spec != Invalid && m_spec != Hsv)
509 return toHsv().getHsvHue();
510 return m_params.ahsv.hue == USHRT_MAX ? -1 : m_params.ahsv.hue / 100;
515 if (m_spec != Invalid && m_spec != Hsv)
516 return toHsv().getHsvSaturation();
517 return m_params.ahsv.saturation >> 8;
522 if (m_spec != Invalid && m_spec != Hsv)
523 return toHsv().getValue();
524 return m_params.ahsv.value >> 8;
532 if (m_spec != Invalid && m_spec != Hsv)
534 toHsv().getHsv(h, s, v, a);
538 *h = m_params.ahsv.hue == USHRT_MAX ? -1 : m_params.ahsv.hue / 100;
539 *s = m_params.ahsv.saturation >> 8;
540 *v = m_params.ahsv.value >> 8;
543 *a = m_params.ahsv.alpha >> 8;
548 if (h < -1 || (
unsigned int)s > 255 || (
unsigned int)v > 255 || (
unsigned int)a > 255)
556 m_params.ahsv.alpha = (
unsigned short)(a * 0x101);
557 m_params.ahsv.hue = (
unsigned short)(h == -1 ? USHRT_MAX : (h % 360) * 100);
558 m_params.ahsv.saturation = (
unsigned short)(s * 0x101);
559 m_params.ahsv.value = (
unsigned short)(v * 0x101);
560 m_params.ahsv.pad = 0;
565 if (m_spec != Invalid && m_spec != Cmyk)
566 return toCmyk().getCyan();
567 return m_params.acmyk.cyan >> 8;
572 if (m_spec != Invalid && m_spec != Cmyk)
573 return toCmyk().getMagenta();
574 return m_params.acmyk.magenta >> 8;
579 if (m_spec != Invalid && m_spec != Cmyk)
580 return toCmyk().getYellow();
581 return m_params.acmyk.yellow >> 8;
586 if (m_spec != Invalid && m_spec != Cmyk)
587 return toCmyk().getBlack();
588 return m_params.acmyk.black >> 8;
593 if (!c || !m || !y || !k)
596 if (m_spec != Invalid && m_spec != Cmyk)
598 toCmyk().getCmyk(c, m, y, k, a);
602 *c = m_params.acmyk.cyan >> 8;
603 *m = m_params.acmyk.magenta >> 8;
604 *y = m_params.acmyk.yellow >> 8;
605 *k = m_params.acmyk.black >> 8;
608 *a = m_params.acmyk.alpha >> 8;
624 m_params.acmyk.alpha = (
unsigned short)(a * 0x101);
625 m_params.acmyk.cyan = (
unsigned short)(c * 0x101);
626 m_params.acmyk.magenta = (
unsigned short)(m * 0x101);
627 m_params.acmyk.yellow = (
unsigned short)(y * 0x101);
628 m_params.acmyk.black = (
unsigned short)(k * 0x101);
633 if (m_spec != Invalid && m_spec != Hsl)
634 return toHsl().getHslHue();
635 return m_params.ahsl.hue == USHRT_MAX ? -1 : m_params.ahsl.hue / 100;
640 if (m_spec != Invalid && m_spec != Hsl)
641 return toHsl().getHslSaturation();
642 return m_params.ahsl.saturation >> 8;
647 if (m_spec != Invalid && m_spec != Hsl)
648 return toHsl().getLightness();
649 return m_params.ahsl.lightness >> 8;
657 if (m_spec != Invalid && m_spec != Hsl)
659 toHsl().getHsl(h, s, l, a);
663 *h = m_params.ahsl.hue == USHRT_MAX ? -1 : m_params.ahsl.hue / 100;
664 *s = m_params.ahsl.saturation >> 8;
665 *l = m_params.ahsl.lightness >> 8;
668 *a = m_params.ahsl.alpha >> 8;
673 if (h < -1 || (
unsigned short)s > 255 || (
unsigned short)l > 255 || (
unsigned short)a > 255)
681 m_params.ahsl.alpha = (
unsigned short)(a * 0x101);
682 m_params.ahsl.hue = (
unsigned short)(h == -1 ? USHRT_MAX : (h % 360) * 100);
683 m_params.ahsl.saturation = (
unsigned short)(s * 0x101);
684 m_params.ahsl.lightness = (
unsigned short)(l * 0x101);
685 m_params.ahsl.pad = 0;
690 if (m_spec == Hsl && m_spec == colt.
m_spec)
693 && ((((m_params.ahsl.hue % 36000) == (colt.
m_params.
ahsl.hue % 36000)))
695 && (abs(m_params.ahsl.saturation - colt.
m_params.
ahsl.saturation) < 50
696 || m_params.ahsl.lightness == 0
698 || m_params.ahsl.lightness == USHRT_MAX
700 && (abs(m_params.ahsl.lightness - colt.
m_params.
ahsl.lightness)) < 50);
704 return (m_spec == colt.
m_spec
707 && ((m_params.ahsv.hue % 36000) == (colt.
m_params.
ahsv.hue % 36000)))
void getRgba(int *r, int *g, int *b, int *a=0) const
It gets the color value.
int getRed() const
It returns the red component color value (a value from 0 to 255).
te::da::Expression * operator==(const te::da::Expression &e1, const te::da::Expression &e2)
int getBlue() const
It returns the blue component color value (a value from 0 to 255).
int getGreen() const
It returns the green component color value (a value from 0 to 255).
int getAlpha() const
It returns the alpha component color value (a value from 0 to 255).
A helper class for 32-bit RGBA (Red-Green-Blue-Alpha channel) color.