我已经从.bmp文件包含的像素值的字节数组。 它是由这样产生的:
BufferedImage readImage = ImageIO.read(new File(fileName));
byte imageData[] = ((DataBufferByte)readImage.getData().getDataBuffer()).getData();
现在,我需要重新创建.BMP图像。 我试图让一个BufferedImage,并通过调用设置的WritableRaster像素setPixels
方法。 但我必须提供一个int [],漂浮[]或加倍[]数组。 也许我需要的字节数组转换为其中之一。 但我不知道该怎么做。 我也尝试了setDataElements
方法。 但我不知道如何可以使用此方法。
谁能解释如何从一个字节数组创建一个bmp图像?
编辑:@Perception
这是我迄今所做的:
private byte[] getPixelArrayToBmpByteArray(byte[] pixelData, int width, int height, int depth) throws Exception{ int[] pixels = byteToInt(pixelData); BufferedImage image = 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 raster = (WritableRaster) image.getData(); raster.setPixels(0, 0, width, height, pixels); image.setData(raster); return getBufferedImageToBmpByteArray(image); } private byte[] getBufferedImageToBmpByteArray(BufferedImage image) { byte[] imageData = null; try { ByteArrayOutputStream bas = new ByteArrayOutputStream(); ImageIO.write(image, "bmp", bas); imageData = bas.toByteArray(); bas.close(); } catch (Exception e) { e.printStackTrace(); } return imageData; } private int[] byteToInt(byte[] data) { int[] ints = new int[data.length]; for (int i = 0; i < data.length; i++) { ints[i] = (int) data[i] & 0xff; } return ints; }
事情是这样的作品就好了灰度图像,但对于彩色图像的颜色是不正确的。 我想这是做的byteToInt方法。如果有人知道如何改进它或者已经有了一个新的和简单的解决方案,UR帮助将不胜感激.. :)