我有一个自定义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,我不知道该怎么做。 或者是否有更简单的方法来做到这一点?
答案 0 :(得分:1)
注意,函数getRGB是bufferedImage.getRGB(x,y),你做的是相反的(x和y反转)。
现在您可以使用Raster或DataBuffer工作:
如果您不知道图像类型并且不想复制代码,我建议使用Raster,否则,使用DataBuffer访问和修改图像值肯定会更快,因为您可以直接访问数组。并且TYPE_INT_RGB不是最实用的图像格式,因为您必须每次将三重RGB解压缩/压缩为int。您可以使用TYPE_3BYTE_BGR。