Расчет среднего цвета с помощью PixelReader - PullRequest
0 голосов
/ 02 апреля 2020

Я не заставил это работать, хотя я предполагал, что это будет тривиально. Я делаю задание для университета и хочу рассчитать средний / доминирующий цвет изображения. Мой подход прост: взять n-точки, получить их значение RGB и создать новый цвет, используя среднее значение всех трех значений RGB. Для простоты я делю изображение, используя горизонтальные и вертикальные линии, расположенные одинаково далеко друг от друга, и использую их пересечения в качестве координат в качестве точки.

Моя реализация с использованием 9 точек выглядит следующим образом:

public static int[] getAverageColor(Image image) {

    PixelReader pr = image.getPixelReader();

    int[] arrayRGB = new int[3];
    int widthIncrement = (int) (image.getWidth() / 5);
    int heightIncrement = (int) (image.getHeight() / 5);

    for (int x = 1; x <= 3; x++) {
        for (int y = 1; y <= 3; y++) {
            Color color = pr.getColor(x * widthIncrement, y * heightIncrement);
            arrayRGB[0] = arrayRGB[0] + (int) color.getRed();
            arrayRGB[1] = arrayRGB[1] + (int) color.getGreen();
            arrayRGB[2] = arrayRGB[2] + (int) color.getBlue();
        }
    }

    for (int i = 0; i < 3; i++) {
        arrayRGB[i] = arrayRGB[i] / 9;
    }

    return arrayRGB;
}

Тем не менее, каждый раз, когда я запускаю getColor (), он выдает «IndexOutOfBoundsException», даже когда я вручную ввожу параметры x и y, которые, как мне известно, меньше ширины и высоты изображения. Кто-нибудь знает как это решить?

Спасибо!

...