[color] Fixed HLS to RGB conversion

The fixed-point values are converted to integers, which obviously
messes up the conversion. Instead, they should be converted to
floating point values before normalizing to bytes for the assignment
to ClutterColor components.
This commit is contained in:
Emmanuele Bassi 2009-03-11 13:53:27 +00:00
parent 5e9894fbac
commit e430903acd

View File

@ -257,9 +257,9 @@ clutter_color_from_hlsx (ClutterColor *color,
if (s == 0) if (s == 0)
{ {
color->red = (guint8) (COGL_FIXED_TO_INT (l) * 255); color->red = (guint8) (COGL_FIXED_TO_FLOAT (l) * 255);
color->green = (guint8) (COGL_FIXED_TO_INT (l) * 255); color->green = (guint8) (COGL_FIXED_TO_FLOAT (l) * 255);
color->blue = (guint8) (COGL_FIXED_TO_INT (l) * 255); color->blue = (guint8) (COGL_FIXED_TO_FLOAT (l) * 255);
} }
else else
{ {
@ -276,10 +276,10 @@ clutter_color_from_hlsx (ClutterColor *color,
CoglFixed tmp; CoglFixed tmp;
tmp = (m1 + COGL_FIXED_MUL_DIV ((m2 - m1), h, COGL_FIXED_60)); tmp = (m1 + COGL_FIXED_MUL_DIV ((m2 - m1), h, COGL_FIXED_60));
color->red = (guint8) (COGL_FIXED_TO_INT (tmp) * 255); color->red = (guint8) (COGL_FIXED_TO_FLOAT (tmp) * 255);
} }
else if (h < COGL_FIXED_180) else if (h < COGL_FIXED_180)
color->red = (guint8) (COGL_FIXED_TO_INT (m2) * 255); color->red = (guint8) (COGL_FIXED_TO_FLOAT (m2) * 255);
else if (h < COGL_FIXED_240) else if (h < COGL_FIXED_240)
{ {
CoglFixed tmp; CoglFixed tmp;
@ -287,10 +287,10 @@ clutter_color_from_hlsx (ClutterColor *color,
tmp = (m1 + COGL_FIXED_MUL_DIV ((m2 - m1), tmp = (m1 + COGL_FIXED_MUL_DIV ((m2 - m1),
(COGL_FIXED_240 - h), (COGL_FIXED_240 - h),
COGL_FIXED_60)); COGL_FIXED_60));
color->red = (guint8) (COGL_FIXED_TO_INT (tmp) * 255); color->red = (guint8) (COGL_FIXED_TO_FLOAT (tmp) * 255);
} }
else else
color->red = (guint8) (COGL_FIXED_TO_INT (m1) * 255); color->red = (guint8) (COGL_FIXED_TO_FLOAT (m1) * 255);
h = hue; h = hue;
while (h > COGL_FIXED_360) while (h > COGL_FIXED_360)
@ -303,10 +303,10 @@ clutter_color_from_hlsx (ClutterColor *color,
CoglFixed tmp; CoglFixed tmp;
tmp = (m1 + COGL_FIXED_MUL_DIV ((m2 - m1), h, COGL_FIXED_60)); tmp = (m1 + COGL_FIXED_MUL_DIV ((m2 - m1), h, COGL_FIXED_60));
color->green = (guint8) (COGL_FIXED_TO_INT (tmp) * 255); color->green = (guint8) (COGL_FIXED_TO_FLOAT (tmp) * 255);
} }
else if (h < COGL_FIXED_180) else if (h < COGL_FIXED_180)
color->green = (guint8) (COGL_FIXED_TO_INT (m2) * 255); color->green = (guint8) (COGL_FIXED_TO_FLOAT (m2) * 255);
else if (h < COGL_FIXED_240) else if (h < COGL_FIXED_240)
{ {
CoglFixed tmp; CoglFixed tmp;
@ -314,10 +314,10 @@ clutter_color_from_hlsx (ClutterColor *color,
tmp = (m1 + COGL_FIXED_MUL_DIV ((m2 - m1), tmp = (m1 + COGL_FIXED_MUL_DIV ((m2 - m1),
(COGL_FIXED_240 - h), (COGL_FIXED_240 - h),
COGL_FIXED_60)); COGL_FIXED_60));
color->green = (guint8) (COGL_FIXED_TO_INT (tmp) * 255); color->green = (guint8) (COGL_FIXED_TO_FLOAT (tmp) * 255);
} }
else else
color->green = (guint8) (COGL_FIXED_TO_INT (m1) * 255); color->green = (guint8) (COGL_FIXED_TO_FLOAT (m1) * 255);
h = hue - COGL_FIXED_120; h = hue - COGL_FIXED_120;
@ -332,10 +332,10 @@ clutter_color_from_hlsx (ClutterColor *color,
CoglFixed tmp; CoglFixed tmp;
tmp = (m1 + COGL_FIXED_MUL_DIV ((m2 - m1), h, COGL_FIXED_60)); tmp = (m1 + COGL_FIXED_MUL_DIV ((m2 - m1), h, COGL_FIXED_60));
color->blue = (guint8) (COGL_FIXED_TO_INT (tmp) * 255); color->blue = (guint8) (COGL_FIXED_TO_FLOAT (tmp) * 255);
} }
else if (h < COGL_FIXED_180) else if (h < COGL_FIXED_180)
color->blue = (guint8) (COGL_FIXED_TO_INT (m2) * 255); color->blue = (guint8) (COGL_FIXED_TO_FLOAT (m2) * 255);
else if (h < COGL_FIXED_240) else if (h < COGL_FIXED_240)
{ {
CoglFixed tmp; CoglFixed tmp;
@ -343,10 +343,10 @@ clutter_color_from_hlsx (ClutterColor *color,
tmp = (m1 + COGL_FIXED_MUL_DIV ((m2 - m1), tmp = (m1 + COGL_FIXED_MUL_DIV ((m2 - m1),
(COGL_FIXED_240 - h), (COGL_FIXED_240 - h),
COGL_FIXED_60)); COGL_FIXED_60));
color->blue = (guint8) (COGL_FIXED_TO_INT (tmp) * 255); color->blue = (guint8) (COGL_FIXED_TO_FLOAT (tmp) * 255);
} }
else else
color->blue = (guint8) (COGL_FIXED_TO_INT (m1) * 255); color->blue = (guint8) (COGL_FIXED_TO_FLOAT (m1) * 255);
} }
} }