gpt4 book ai didi

java - 如何从java中的像素字节数组制作bmp图像

转载 作者:搜寻专家 更新时间:2023-11-01 03:27:22 30 4
gpt4 key购买 nike

我有一个字节数组,其中包含来自 .bmp 文件的像素值。它是通过这样做生成的:

BufferedImage readImage = ImageIO.read(new File(fileName));
byte imageData[] = ((DataBufferByte)readImage.getData().getDataBuffer()).getData();

现在我需要重新创建 .bmp 图像。我尝试制作一个 BufferedImage 并通过调用 setPixels 方法设置 WritableRaster 的像素。但我必须提供一个 int[]、float[] 或 double[] 数组。也许我需要将字节数组转换为其中之一。但我不知道该怎么做。我还尝试了 setDataElements 方法。但我也不确定如何使用此方法。

谁能解释一下如何从字节数组创建 bmp 图像?

编辑@Perception

这是我到目前为止所做的:

private byte[] getPixelArrayToBmpByteArray(byte[] pixelData, int width, int height, int depth) 抛出异常{ int[] 像素 = byteToInt(pixelData); BufferedImage图像=空; 如果(深度==8){ image = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY); } 否则如果(深度==24){ image = new BufferedImage(宽度, 高度, BufferedImage.TYPE_INT_RGB); } WritableRaster 栅格 = (WritableRaster) image.getData(); raster.setPixels(0, 0, 宽度, 高度, 像素); image.setData(光栅); 返回 getBufferedImageToBmpByteArray(图像); } 私有(private)字节[] getBufferedImageToBmpByteArray(BufferedImage image) { byte[] imageData = null; 尝试 { ByteArrayOutputStream bas = new ByteArrayOutputStream(); ImageIO.write(图像, "bmp", bas); imageData = bas.toByteArray(); bas.close(); } catch (异常 e){ e.printStackTrace(); } 返回图像数据; } 私有(private) int[] byteToInt(byte[] 数据) { int[] ints = new int[data.length]; 对于 (int i = 0; i

最佳答案

您需要将三个字节打包到您创建的每个整数中。根据缓冲图像的格式,这将是 0xRRGGBB。

byteToInt 将不得不像这样消耗三个字节:

private int[] byteToInt(byte[] data) {
int[] ints = new int[data.length / 3];

int byteIdx = 0;
for (int pixel = 0; pixel < ints.length) {
int rByte = (int) pixels[byteIdx++] & 0xFF;
int gByte = (int) pixels[byteIdx++] & 0xFF;
int bByte = (int) pixels[byteIdx++] & 0xFF;
int rgb = (rByte << 16) | (gByte << 8) | bByte
ints[pixel] = rgb;
}
}

您还可以使用 ByteBuffer.wrap(arr, offset, length) .toInt()

关于java - 如何从java中的像素字节数组制作bmp图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10061029/

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