gpt4 book ai didi

java - 来自 RGB byte[] 数组的 BufferedImage

转载 作者:行者123 更新时间:2023-11-30 05:25:56 26 4
gpt4 key购买 nike

我有一个包含 RGB 值的 byte[] 数组。我想创建 BufferedImage 而不需要一一设置像素,因为图像可能很大。我找到了以下片段:

        byte[] frame = ...;
BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR);
img.setData(Raster.createRaster(img.getSampleModel(), new DataBufferByte(frame, frame.length), new Point() ) );

这确实工作得很好,但有一个小问题;-) TYPE_3BYTE_BGR 需要相反顺序的字节。

所以问题是:

  1. 是否可以以某种方式加载我的数组,而无需实际创建具有预期顺序的新字节数组?
  2. 如果不可能,是否有比 for 循环更好的方法将数据从 RGB 格式复制到 BGR?

最佳答案

试试这个代码

BufferedImage img = create3ByteRGBImage(int width, int height, new int[] {8, 8, 8},
new int[] {0, 1, 2});

private BufferedImage create3ByteRGBImage(width, height, int[] nBits, int[] bOffs) {
ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_sRGB);
ColorModel colorModel =
new ComponentColorModel(cs, nBits,
false, false,
Transparency.OPAQUE,
DataBuffer.TYPE_BYTE);
WritableRaster raster =
Raster.createInterleavedRaster(DataBuffer.TYPE_BYTE,
width, height,
width*3, 3,
bOffs, null);
return new BufferedImage(colorModel, raster, false, null);
}

关于java - 来自 RGB byte[] 数组的 BufferedImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58616909/

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