.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
本当に 'Raster'から読み込む必要はありますか? [ByteArrayOutputStreamで読み書きする](http://stackoverflow.com/a/356650/104223)を試しましたか? – Leigh
@Leigh与えられたリンクは、異なるタイプの別の画像から(特定のタイプの)画像を作ることです。しかし、問題はイメージがありません、私はピクセルの幅と高さに沿って、bmpイメージのピクセル部分を持っています。うーん努力していただきありがとうございます.. –