Convert Color Spaces (RGB->HSV)
November 23rd, 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, v;
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));
}
if(max == 0){
s = 0.0f;
}else{
s = 1.0f - (min / max);
}
v = max;
//0.0f <= h <= 360.0f
//0.0f <= s <= 1.0f
//0.0f <= v <= 1.0f
return HSV_OF(h, s, v);
}
) Your Reply...