我在处理 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);
最佳答案
显然,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
关于java - 在 BufferedImage 上获取和设置 RGB 值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22118268/