Java hsb 度或 255

Java hsb degrees or 255

我想知道当您调用 color.HSBtoRGB 时是否会输入 0-255、0-1、0-360 范围内的色调值?我在询问,因为我正在尝试将边缘角度转换为颜色,但它只给我蓝色或紫色?谁能解释我在做什么?

public void sobelGrey(){
    this.greyScale();
    double edgex;
    double edgey;
    Picture pi = new Picture(this.getWidth(), this.getHeight());
    Picture tou = new Picture(this.getWidth(), this.getHeight());
    Pixel[][] Y = pi.getPixels2D();
    Pixel[][] X = tou.getPixels2D();
    Pixel[][] h = this.getPixels2D();
    for (int y = 1; y< X.length-1; y++){
        for(int x= 1; x<X[1].length-1; x++){
            edgex =
                    h[y-1][x-1].getRed() * -1 +
                            h[y][x-1].getRed()  * -2+
                            h[y+1][x-1].getRed()  * -1+
                            h[y-1][x+1].getRed() * 1 +
                            h[y][x+1].getRed()  * 2+
                            h[y+1][x+1].getRed()  * 1;
            Y[y][x].setRed((int)Math.abs(edgex/2));
            Y[y][x].setGreen((int)Math.abs(edgex/2));
            Y[y][x].setBlue((int)Math.abs(edgex/2));
        }
    }

    for (int y = 1; y< X.length-1; y++){
        for(int x= 1; x<X[1].length-1; x++){
            edgex =
                    h[y-1][x-1].getRed() * -1 +
                            h[y-1][x].getRed()  * -2+
                            h[y-1][x+1].getRed()  * -1+
                            h[y+1][x-1].getRed() * 1 +
                            h[y+1][x].getRed()  * 2+
                            h[y+1][x+1].getRed()  * 1;
            X[y][x].setRed((int)Math.abs(edgex/2));
            X[y][x].setGreen((int)Math.abs(edgex/2));
            X[y][x].setBlue((int)Math.abs(edgex/2));
        }
    }

    for (int y = 1; y< X.length-1; y++){
        for(int x= 1; x<X[1].length-1; x++){
            int x1 = (int) Math.sqrt(Math.pow(X[y][x].getRed(), 2) + Math.pow(X[y][x].getGreen(), 2) + Math.pow(X[y][x].getBlue(), 2));
            int y1 = (int) Math.sqrt(Math.pow(Y[y][x].getRed(), 2) + Math.pow(Y[y][x].getGreen(), 2) + Math.pow(Y[y][x].getBlue(), 2));
            int hr = (int) (200/(2*Math.PI)*(Math.tanh(y1/ (x1+.000000000000001))));

            int rgb = Color.HSBtoRGB(hr/255, hr, (int) Math.sqrt(Math.pow(x1, 2) + Math.pow(y1, 2)));
            Color fixed = new Color(rgb&0xFF*7/10, (rgb>>8)&0xFF*80/255/10, (rgb>>16)&0xFF*4/10);
            if( !(Math.sqrt(Math.pow(x1, 2) + Math.pow(y1, 2))< 40))
            h[y][x].setColor(fixed);
            else
                h[y][x].setColor(Color.black);
        }
    }
    pi.explore();
    tou.explore();
    explore();
}

我正在使用 Eimacs 的计算机科学 AP 图像处理,并使用 swan

您将 hr(和其他变量)声明为 int。然后在 Color.HSBtoRGB(hr/255, ... 中,将 int 除以 int。对于所有低于 255 的 hr 值,结果将为 0

可能除以 255.0 就足以强制进行浮点除法。