2012-02-22 48 views
2

我使用方法getRGB()BufferedImage获得像素。像素存储在名为data[]的阵列中。在对数据数组进行一些操作后,我需要再次创建一个BufferedImage,以便我可以将它传递给将从此数据数组显示修改后的图像的模块,但我坚持使用它。如何从包含像素的数组创建BufferedImage?

回答

2
BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); 

然后再次设置像素。

bufferedImage.setRGB(x, y, your_value); 

PS:如在评论中指出,请使用该方法的getRGB()使用的答案从@TacticalCoder

+1

您不应该遍历整个图像并一次设置一个位。你应该一次复制整个缓冲区。 – 2014-12-09 11:50:39

+1

这是设置bufferedimage中所有像素的可怕方法,不应该被接受。 – tofiffe 2015-10-29 17:48:50

-1

您可以使用setRGB方法设置新图像中像素的RGB(int)值。

+0

我该如何创建bufferedimage? – Saurabh 2012-02-22 14:04:26

19

我从BufferedImage中的像素。 像素存储在名为data []的数组中。

请注意,这可能会非常慢。如果您的BufferedImage支持它,您可能需要访问底层的int []并直接从那里复制/读取像素。

例如,您数据[]快速度复制到底层INT []新BufferedImage的:

BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB); 
final int[] a = ((DataBufferInt) res.getRaster().getDataBuffer()).getData(); 
System.arraycopy(data, 0, a, 0, data.length); 

当然,你要确保你的数据[]包含与BufferedImage相同的像素(本例中为ARGB)。

+1

这是更好的答案。我无法想到setRGB是任何事情的最佳解决方案。 – MCllorf 2017-10-31 07:48:27

+0

我认为你的代码存在错误:你的意思是'bi.getRaster'而不是'res.getRaster'? – Warkst 2018-01-26 16:16:56

相关问题