Я не заставил это работать, хотя я предполагал, что это будет тривиально. Я делаю задание для университета и хочу рассчитать средний / доминирующий цвет изображения. Мой подход прост: взять 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, которые, как мне известно, меньше ширины и высоты изображения. Кто-нибудь знает как это решить?
Спасибо!