在BufferedImage上获取和设置RGB值

时间:2014-03-01 18:11:46

标签: java bufferedimage argb

我在处理Java中的RGB值时非常糟糕,这让我开始尝试使用它进行小型实验。

我接下来讨论:加载图像,获取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);

output

1 个答案:

答案 0 :(得分:4)

显然,getRGBsetRGB未正确使用。

我将代码更改为:

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