Convert Color Spaces (RGB->HSL)
November 29th, 2009
Math
C/C++
pixeltype RGBtoHSV(pixeltype palette_color){
//0.0f <= r <= 1.0f
//0.0f <= g <= 1.0f
//0.0f <= b <= 1.0f
double r = (double)(RED_OF(palette_color));
double g = (double)(GREEN_OF(palette_color));
double b = (double)(BLUE_OF(palette_color));
double max, min, h, s, l;
if(r > g){
max = r;
}else{
max = g;
}
if(b > max){
max = b;
}
if(r < g){
min = r;
}else{
min = g;
}
if(b < min){
min = b;
}
if(max == min){
h = 0.0f;
}else if(max == r){
h = ((60.0f * ((g - b) / (max - min)) + 360) % 360.0f);
}else if(max == g){
h = ((60.0f * ((b - r) / (max - min)) + 120));
}else if(max == b){
h = ((60.0f * ((r - g) / (max - min)) + 240));
}
l = (max + min) / 2.0f;
if(max == min){
s = 0;
}else if(l <= 0.5f){
s = ((max - min) / (2 * l));
}else if(l > 0.5f){
s = ((max - min) / (2 - (2 * l)));
}
//0.0f <= h <= 360.0f
//0.0f <= s <= 1.0f
//0.0f <= l <= 1.0f
return HSL_OF(h, s, l);
}
}
) Your Reply...