二维RGB数组到BufferedImage

时间:2015-11-10 21:54:35

标签: java image rgb bufferedimage

我有一个自定义RGB类:

class RGB {
    int R, G, B;
}

我制作一个代表图像的RGB对象的二维数组:

RGB[][] image = new RGB[HEIGHT][WIDTH];

for (int i = 0; i < HEIGHT; i++) {
    for (int j = 0; j < WIDTH; j++) {
        int pixel = bufferedImage.getRGB(i, j);
        int red = (pixel >> 16) & 0xff;
        int green = (pixel >> 8) & 0xff;
        int blue = (pixel) & 0xff;
        image[i][j] = new RGB(red, green, blue);
    }
}

现在我想对这个数组进行一些更改并将其保存为BufferedImage。 基本上,我可以做这样的事情:

BufferedImage newImage = new BufferedImage(HEIGHT, WIDTH, BufferedImage.TYPE_INT_RGB);
for (int i = 0; i < HEIGHT; i++) {
    for (int j = 0; j < WIDTH; j++) {
        newImage.setRGB(i, j, VALUE);
    }
}

但是我需要将每个像素的RGB字段转换为一个整数VALUE,我不知道该怎么做。 或者是否有更简单的方法来做到这一点?

1 个答案:

答案 0 :(得分:1)

注意,函数getRGB是bufferedImage.getRGB(x,y),你做的是相反的(x和y反转)。

现在您可以使用Raster或DataBuffer工作:

  1. newimage.getRaster()。setSample(x,y,0,VALUE)
  2. int [] newimagebuffer =((DataBufferInt)newimage.getRaster()。getDataBuffer).getData()然后newimagebuffer [x + y * WIDTH] = VALUE。
  3. 如果您不知道图像类型并且不想复制代码,我建议使用Raster,否则,使用DataBuffer访问和修改图像值肯定会更快,因为您可以直接访问数组。并且TYPE_INT_RGB不是最实用的图像格式,因为您必须每次将三重RGB解压缩/压缩为int。您可以使用TYPE_3BYTE_BGR。