我有一個包含.bmp文件中的像素值的字節數組。它是通過這樣做生成的:如何從java中的像素字節數組中製作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[] 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方法有關的..如果有人知道如何改進它或得到了一個新的和更簡單的解決方案,我們將不勝感激... :)
小心你當前的代碼設置圖像數據? – Perception 2012-04-08 07:26:09
你真的需要閱讀'Raster'嗎?你有沒有嘗試[讀/寫與ByteArrayOutputStream](http://stackoverflow.com/a/356650/104223)? – Leigh 2012-04-09 01:47:45
@Leigh你給出的鏈接是關於從另一個不同類型的圖像中製作一個(特定類型的)圖像。但問題是我沒有圖像,我已經得到了BMP圖像的像素部分(以及像素中的寬度和高度)。感謝你的努力.. – 2012-04-11 06:17:06