The HLS to RGB conversion in case the S value is zero is:
R = G = B = luminance
ClutterColor uses a byte (0 to 255) for the R, G and B channels
encoding, while luminance is expressed using a floating point value
in the closed interval [0, 1]; thus the case above becomes:
R = G = B = (luminance * 255)
The clutter_color_from_hls() code is missing the final step of
de-normalizing the luminance value, and so it breaks the roundtrip
colorspace conversion between RGB and HLS.
Fixes bug:
http://bugzilla.openedhand.com/show_bug.cgi?id=1695
hue /= 360.0;
- if (luminance == 0)
- {
- color->red = color->green = color->blue = 0;
- return;
- }
-
if (saturation == 0)
{
- color->red = color->green = color->blue = luminance;
+ color->red = color->green = color->blue = (luminance * 255);
+
return;
}
{
if (tmp3[i] < 0)
tmp3[i] += 1.0;
+
if (tmp3[i] > 1)
tmp3[i] -= 1.0;
clr[i] = tmp1;
}
- color->red = clr[0] * 255.0;
+ color->red = clr[0] * 255.0;
color->green = clr[1] * 255.0;
- color->blue = clr[2] * 255.0;
+ color->blue = clr[2] * 255.0;
}
/**