2
我在Java中处理RGB值的时间非常糟糕,这让我开始尝试使用这种小型实验。在BufferedImage上获取和设置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);
它看起来像最后一个参数是图像的宽度,以便该方法知道何时开始每个新行。 – Tharwen
嗯,不知道:宽度已经发送作为第三个参数...和图像宽度已经在构造函数中设置... – Vespas
这是扫描线的长度。 :-)在大多数情况下,这等于宽度,但也可以更大。对于某些显示/图像格式,将填充放置在每个扫描行的末尾是有意义的(例如,以确保每条新行以偶数开始,即下一个字/长字边界)。这些填充像素不会使图像更宽,但仍然是后备数据缓冲区/数组的一部分,这就是为什么您需要这个参数。只要你使用值> =图像宽度,并在两个地方使用相同的值,你应该是好的。说得通? :-) – haraldK