gpt4 book ai didi

java - Java 中 BufferedImage 的 3/3/2 RGB 样本字节数组

转载 作者:行者123 更新时间:2023-12-01 20:20:17 27 4
gpt4 key购买 nike

我有一个字节数组,其中每个字节描述一个像素(256 种颜色)。这是我使用的位掩码:0xRRRGGGBB因此,R 和 G 分量有 3 位,B 分量有 2 位。假设我知道图像的宽度和高度,如何从该数组构造 BufferedImage?

最佳答案

首先,我们必须使用您的数据创建一个数据缓冲区
DataBufferByte buffer = new DataBufferByte(data, data.length);

接下来,我们需要声明“bandMasks”,以便栅格可以理解您的格式
int[] bandMasks = {0b11100000, 0b00011100, 0b00000011};

现在,我们可以创建栅格
WritableRaster raster = Raster.createPackedRaster(buffer, width, height, width, bandMasks, null);(仅供引用,宽度被指定两次,因为它是扫描大小)

现在我们可以使用缓冲区、光栅和颜色模型创建图像
BufferedImage image = new BufferedImage(new DirectColorModel(8, 0b11100000, 0b00011100, 0b00000011), 光栅, false, null);
另外,您可以删除二进制文字中前面的 0,因为默认情况下这些位将为 0(0b00000011 与 0b11 相同或(十进制)00029 与 29 相同),您不需要指定所有 32 位一个整数

我使用整个段验证了之前的代码是否有效:

    byte[] data = new byte[]{
(byte) 0b00000011/*Blue*/, (byte) 0b11100011/*Purple*/,
(byte) 0b11100011/*Purple*/, (byte) 0b11111111/*White*/};//This is the "image"

int width = 2, height = 2;

DataBufferByte buffer = new DataBufferByte(data, data.length);
int[] bandMasks = {0b11100000, 0b00011100, 0b00000011};

WritableRaster raster = Raster.createPackedRaster(buffer, width, height, width, bandMasks, null);

BufferedImage image = new BufferedImage(new DirectColorModel(8, 0b11100000, 0b00011100, 0b00000011), raster, false, null);

JFrame frame = new JFrame("Test");
Canvas c = new Canvas();
frame.add(c);
frame.setSize(1440, 810);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
while (true) {
Graphics g = c.getGraphics();
g.drawImage(image, 0, 0, image.getWidth() * 40, image.getHeight() * 40, null);
}

希望这会有所帮助!

关于java - Java 中 BufferedImage 的 3/3/2 RGB 样本字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44889639/

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