Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从包含像素的数组创建BuffereImage?_Java_Image_Image Processing_Bufferedimage_Pixels - Fatal编程技术网

Java 如何从包含像素的数组创建BuffereImage?

Java 如何从包含像素的数组创建BuffereImage?,java,image,image-processing,bufferedimage,pixels,Java,Image,Image Processing,Bufferedimage,Pixels,我使用方法getRGB()从buffereImage获取像素。像素存储在名为data[]的数组中。在对数据数组进行一些操作之后,我需要再次创建一个buffereImage,这样我就可以将它传递给一个模块,该模块将从该数据数组显示修改后的图像,但我一直在使用它 您可以使用setRGB方法为新图像中的像素设置RGB(int)值 BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_R

我使用方法
getRGB()
buffereImage
获取像素。像素存储在名为
data[]
的数组中。在对数据数组进行一些操作之后,我需要再次创建一个
buffereImage
,这样我就可以将它传递给一个模块,该模块将从该数据数组显示修改后的图像,但我一直在使用它

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

BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
然后再次设置像素

bufferedImage.setRGB(x, y, your_value);
PS:如评论中所述,请使用@TacticalCoder的答案

我使用getRGB()方法从BuffereImage获取像素。这个 像素存储在称为data[]的数组中

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

例如,要将数据[]快速复制到新BuffereImage的基础int[],请执行以下操作:

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);

当然,您希望确保您的数据[]包含与BuffereImage(本例中为ARGB)相同表示形式的像素。

如何创建BuffereImage?您不应该遍历整个图像,每次设置一位。你应该一次复制整个缓冲区。这是一种设置缓冲区图像中所有像素的糟糕方法,不应该是可接受的答案。这是更好的答案。我想不出在任何情况下setRGB都是最佳的解决方案。我认为您的代码中有一个错误:您是指
bi.getRaster
而不是
res.getRaster