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)
但我仍然不确定。
答案 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);