我有一个字节数组,其中包含来自 .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) throws Exception{ int[] pixel = byteToInt(pixelData); BufferedImage 图像 = null; if(depth == 8) { image = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY); } else if(depth == 24){ image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); } WritableRaster 光栅 = (WritableRaster) image.getData(); raster.setPixels(0, 0, 宽度, 高度, 像素); image.setData(光栅);返回 getBufferedImageToBmpByteArray(image); } private byte[] getBufferedImageToBmpByteArray(BufferedImage image) { byte[] imageData = null; 尝试 { ByteArrayOutputStream bas = new ByteArrayOutputStream(); ImageIO.write(image, "bmp", bas); imageData = bas.toByteArray(); bas.close(); } 捕捉(异常 e){ e.printStackTrace(); } 返回图像数据;} private int[] byteToInt(byte[] data) { int[] ints = new int[data.length]; 对于 (int i = 0; 我