Я следую учебному пособию по расширению моих знаний, но наставник иногда думает, что некоторые вещи не нужно объяснять.BufferedImage автоматически обновляется, когда обновляется int-array, представляющий его растровый
посмотрите на этот код:
private BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
private int[] pixels = ((DataBufferInt) image.getRaster().getDataBuffer()).getData();
someMethod() {
for (int i=0; i<pixels.length; i++) {
pixels[i] = i;
}
g.drawImage(image, 0, 0, getWidth(), getHeight(), null);
}
Я рисую на холсте и к моему большому удивлению, это краска цвета от черного до синего. Интересно, как получить доступ/изменить цвета красного и зеленого (так как «пиксели» представляют собой массив одиночных целых чисел). если я заменил RGB на BGR, вместо этого этот цвет будет красным. Но это побочный эффект. EDIT: красить зеленые и красные операторы с битрейтом << and |
. например: int greenColor = 255<<16;
или int greenAndRed = 255<<16 | 255<<8;
EDIT-END
Одна из основных головоломки здесь почему-либо окрашивается вообще. Как назначить значения пикселю обновления массива пикселей? (Я вообще не понимаю объявление поля. Что такое массив, который есть). Но мои знания Java говорят мне, что это не имеет значения. Это обычный int-массив с обычными ints. Может ли кто-нибудь сказать мне, что происходит?
EDIT Вопрос был разрешен. На самом деле не удивительно, что данные изображения изменяются вообще, поскольку массивы не являются неизменяемыми, как другие простые типы данных.
System.out.println возвращает true, если вы меняете пиксель [1] на пиксели [1] – arynaq
@arynaq О, да, извините. Это была опечатка. Вопрос был основан на ошибке с моей стороны. Я мог бы поклясться, что массивы неизменны. Я просто удалю эту часть ОП. – user2651804