gpt4 book ai didi

java - 二维RGB数组转BufferedImage

转载 作者:行者123 更新时间:2023-12-01 10:55:14 29 4
gpt4 key购买 nike

我有一个自定义 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,但我不知道该怎么做。或者也许有更简单的方法来做到这一点?

最佳答案

请注意,函数 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 .

如果您不知道图像类型并且不想重复代码,我建议使用 Raster,但除此之外,使用 DataBuffer 访问和修改图像值肯定更快,因为您可以直接访问数组。并且 TYPE_INT_RGB 不是最实用的图像格式,因为每次都必须将三元组 RGB 解压缩/压缩为 int。您可以使用TYPE_3BYTE_BGR。

关于java - 二维RGB数组转BufferedImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33640364/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com