Получение и установка значений RGB для BufferedImage

У меня действительно плохое время работы со значениями RGB в Java, что заставило меня начать небольшие эксперименты с этим.

Я пришел к этому: загрузка изображения, получение его значений RGB и создание нового изображения с теми же значениями. К сожалению, это не работает (изображения отображаются по-разному, см. Рисунок), как показано в следующем коде... Может кто-нибудь увидеть, что не так?

BufferedImage oriImage=ImageIO.read(new  URL("http://upload.wikimedia.org/wikipedia/en/2/24/Lenna.png"));

int[] oriImageAsIntArray = new int[oriImage.getWidth()*oriImage.getHeight()];
oriImage.getRGB(0, 0, oriImage.getWidth(),oriImage.getHeight(), oriImageAsIntArray, 0, 1);

BufferedImage bfImage= new BufferedImage(oriImage.getWidth(),oriImage.getHeight(),
            BufferedImage.TYPE_INT_ARGB);

bfImage.setRGB(0,0,bfImage.getWidth(),bfImage.getHeight(),oriImageAsIntArray, 0, 1);

выход

1 ответ

По-видимому, getRGB а также setRGB не были использованы правильно.

Я изменил код на:

oriImage.getRGB(0, 0, oriImage.getWidth(),oriImage.getHeight(), oriImageAsIntArray, 0,  oriImage.getWidth());
(...)
bfImage.setRGB(0,0,bfImage.getWidth(),bfImage.getHeight(),oriImageAsIntArray, 0, bfImage.getWidth());

... и изображение отображается правильно. Я до сих пор не понимаю, что это за последний аргумент. В JavaDoc это описывается как:

scansize - scanline stride for the rgbArray
Другие вопросы по тегам