如何操纵BufferedImage

时间:2013-06-18 05:43:52

标签: java image-processing processing bufferedimage

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)  

但我仍然不确定。

2 个答案:

答案 0 :(得分:2)

PImage类与BufferedImage类集成了一点:

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

//PImage to BufferedImage
BufferedImage img = (BufferedImage)yourPImageInstance.getNative();

答案 1 :(得分: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);

正如提醒一下,这是一种从BufferedImage

中提取像素的方法
Raster raster = bufferedImage.getRaster();
int[] pixels = raster.getPixels(0, 0, raster.getWidth(), raster.getHeight(), (int[]) null);