Степени hsb Java или 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();
}

Я использую компьютерную программу обработки изображений AP от Eimacs и использую лебедь

Может быть, если вы покажете нам свой код, мы сможем сказать вам, что с ним не так.

takendarkk 17.04.2018 20:36
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
81
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы объявили hr (и другие переменные) как int. Затем в Color.HSBtoRGB(hr/255, ... вы делите int на int. Для всех значений hr ниже 255 результатом будет 0.

Вероятно, достаточно разделить на 255.0, чтобы заставить деление с плавающей запятой.

так оттенок находится в диапазоне 0-1?

mark anthony 17.04.2018 22:05

Все аргументы равны 0..1 :, оттенок 0-1 = 0-360deg (быстрый Google показал это: docs.oracle.com/javase/7/docs/api/java/awt/Color.html)

Rainer Schwarze 17.04.2018 23:10

Хорошо спасибо. Вы случайно не знаете, как сделать края более тонкими, чтобы они были толщиной в один пиксель, а не в четыре?

mark anthony 19.04.2018 20:36

Извини, нет. Я давно не работал с такими вещами.

Rainer Schwarze 20.04.2018 15:36

Другие вопросы по теме