嗨,我想转换从rgb到hsv,我一直遵循算法从easyRGB.com。但不起作用它显示出比正常情况下更红。我重写了几次相同的算法,并进行了修改,但是我找不到错误。有什么想法吗?这就是算法。
public static double[] RGB2HSV(double[] tmp){
double R = tmp[0] / 255.0;
double G = tmp[1] / 255.0;
double B = tmp[2] / 255.0;
double min = Math.min(Math.min(R, G), B);
double max = Math.max(Math.max(R, G), B);
double delta = max - min;
double H = max;
double S = max;
double V = max;
if(delta == 0){
H = 0;
S = 0;
}else{
S = delta / max;
double delR = ( ( ( max - R ) / 6 ) + ( delta / 2 ) ) / delta;
double delG = ( ( ( max - G ) / 6 ) + ( delta / 2 ) ) / delta;
double delB = ( ( ( max - B ) / 6 ) + ( delta / 2 ) ) / delta;
if(R == max){
H = delB - delG;
}else if(G == max){
H = (1/3) + delR - delB;
}else if(B == max){
H = (2/3) + delG - delR;
}
if(H < 0) H += 1;
if(H > 1) H -= 1;
}
double[] hsv = new double[3];
hsv[0] = H;
hsv[1] = S;
hsv[2] = V;
return hsv;
}发布于 2015-11-28 18:58:49
1/3和(2/3)的值是0,因为您使用两个整数操作,所以结果也是整数。
使用1.0 / 3.0和2.0 / 3.0代替。
https://stackoverflow.com/questions/33975014
复制相似问题