【问题标题】:Converting RGB to HSV将 RGB 转换为 HSV
【发布时间】:2015-11-28 18:40:01
【问题描述】:

您好,我想从 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;
}

【问题讨论】:

    标签: java rgb hsv


    【解决方案1】:

    1/3和(2/3)的值是0,因为你在操作两个整数,所以结果也是整数。

    请改用1.0 / 3.0 和2.0 / 3.0。

    【讨论】:

    • 老实说,感谢我的愚蠢错误。我不敢相信我一直在努力解决这个问题而没有意识到这一点。谢谢!
    猜你喜欢
    • 2011-01-24
    • 1970-01-01
    • 2010-12-14
    • 1970-01-01
    • 1970-01-01
    • 2015-03-11
    • 2011-06-01
    • 2020-06-03
    • 1970-01-01
    相关资源
    最近更新 更多