0

Processing有一个名为的类,您可以从中获取包含所有像素值PImage的数组。int然后,您操作此数组并调用updatePixels()并瞧瞧您已对图像应用了效果。

我想知道是否可以通过BufferedImage一些适当的机制来完成同样的工作。我发现BufferedImage确实有一种方法可以将像素获取为int[]

public int[] getRGB(int startX,
                    int startY,
                    int w,
                    int h,
                    int[] rgbArray,
                    int offset,
                    int scansize)
Returns an array of integer pixels in the default RGB color model (`TYPE_INT_ARGB`) and default sRGB color space, from a portion of the image data. 
Color conversion takes place if the default model does not match the image `ColorModel`. 
There are only 8-bits of precision for each color component in the returned data when using this method.  

如何修改这些像素并显示适当的变化BufferedImage

我想我需要WritableRaster为图像获取一个并使用

public void setPixels(int x,
                      int y,
                      int w,
                      int h,
                      int[] iArray)  

但我仍然不确定。

4

2 回答 2

2

该类PImage与该类有点集成BufferedImage

//BufferedImage to PImage
PImage img = new PImage(yourBufferedImageInstance);

//PImage to BufferedImage
BufferedImage img = (BufferedImage)yourPImageInstance.getNative();
于 2013-06-18T19:45:09.937 回答
2

要创建一个WritableRaster,您必须先选择一个ColorModel。我认为 RGB 默认值应该适合您的需要。

ColorModel colorModel = ColorModel.getRGBdefault();
WritableRaster raster = colorModel.createCompatibleWritableRaster(width, height);

然后,您可以用像素填充它并创建一个新的BufferedImage.

raster.setPixels(0, 0, width, height, pixels);      
BufferedImage image = new BufferedImage(colorModel, raster, true, null);

提醒一下,这是一种从 a 中提取像素的方法BufferedImage

Raster raster = bufferedImage.getRaster();
int[] pixels = raster.getPixels(0, 0, raster.getWidth(), raster.getHeight(), (int[]) null);
于 2013-06-18T20:46:05.223 回答