java - 如何使用setRGB制作图像?

时间:2014-06-30 10:47:02

标签: java

我有2D数组来保持颜色分量值:

p[pixel_value][red]
p[pixel_value][green]
p[pixel_value][blue]

我只是不知道如何使用它们制作图像。

我读到了setRGB,我理解的是我应该将它们全部混合成一个RGBArray。那怎么做呢?

是否有更好的方法来制作没有setRGB的图像?我需要一些解释。

3 个答案:

答案 0 :(得分:3)

方法setRGB()可用于设置已存在图像的像素颜色。您可以使用存储在2D阵列中的值打开已存在的图像并设置其所有像素。 你可以这样做:

BufferedImage img = ImageIO.read(new File("image which you want to change the pixels"));
for(int width=0; width < img.getWidth(); width++)
{
    for(int height=0; height < img.getHeight(); height++)
    {
          Color temp = new Color(p[pixel_value][red], p[pixel_value][green], p[pixel_value][blue]);
          img.setRGB(width, height, temp.getRGB());
    }
}
ImageIO.write(img, "jpg", new File("where you want to store this new image"));

像这样,您可以迭代所有像素并相应地设置它们的颜色。

注意:这样做会丢失原始图像。这只是我所知道的一种方式。

答案 1 :(得分:2)

您需要的是BufferedImage。如果RGB是您想要的,则使用指定的宽度和高度创建BufferedImage类型TYPE_3BYTE_BGR

  

QuickFact:
  BufferedImage子类描述了具有可访问性的Image   图像数据的缓冲区。

然后,调用getRaster()方法获取WritableRaster

  

QuickFact:
  此类扩展Raster以提供像素写入功能。

然后,使用setPixel(int x, int y, double[] dArray)方法设置像素。

更新:

如果您只想读取图像,请使用ImageIO.read(File f)方法。它允许您在一个方法调用中读取图像文件。

有点SSCCE:

BufferedImage img = null;
try {
    img = ImageIO.read(new File("strawberry.jpg"));
} catch (IOException e) {
}

答案 2 :(得分:1)

您想手动设置RGB值吗?

你需要知道,因为int是32位,它包含所有4个rgb值(透明度为1)。

xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx
^Alpha     ^red    ^green    ^blue

您可以通过使用二进制算法来完成使用4个int值:

int rgb = (red << 16) && () (green << 8) & (blue);
bufferedImage.setRGB(x, y, rgb);

在上面,如果需要,您也可以添加Alpha。您只需将二进制代码“推送”到正确的位置即可。