Java で生の byte[] から BMP ファイルを作成する方法
-
19-09-2019 - |
質問
カメラと通信して生の画像データを取得する C++ アプリケーションがあります。次に、C++ で Byte[] を作成し、JNI を使用して Java に送信したいと考えています。
ただし、生の Byte[] を実際のファイル形式に変換する必要があります (.bmp が私の第一選択でした)。BITMAPFILEINFO と BITMAPHEADERINFO を使用して、C++ からハードドライブ上のファイルに書き込むと、これを簡単に行うことができますが、フォーマット全体を Java に送信する方法がわかりません。
次に、JNIを使用してRaw []データのみを送信してから.BMPに変換することを考えましたが、Javaでこれを行うための良いライブラリを見つけることはできません。
私の最善の選択は何でしょうか?画像を C++ で変換してから JNI を使用して送信するか、RAW データを Java に送信してから .bmp に変換しますか?これを最も簡単に達成するにはどうすればよいでしょうか?
解決
Java 1.5 では次の 2 行です。
BufferedImage image = ImageIO.read( new ByteArrayInputStream( byteArray ) );
ImageIO.write(image, "BMP", new File("filename.bmp"));
私の知る限り、Java (Windows 上) は jpg、png、bmp をエクスポートする方法を知っています。
他のヒント
そんなことをする必要はありません。バイト配列をInputStreamに変換し、それをImageIO.read()に送ります。
public Image getImageFromByteArray(byte[] byteArray){
InputStream is = new ByteArrayInputStream(byteArray);
return ImageIO.read(is);
}
これにより、バイト配列から Image オブジェクトが作成され、GUI コンポーネント内に表示するのは非常に簡単になります。保存したい場合は、ImageIO クラスを使用することもできます。
public void saveImage(Image img, String fileFormat, File f){
ImageIO.write(img, fileFormat, f);
}
のように書く方法を知っていれば、 .bmp
ファイルに書き込むと、代わりに (ほぼ) 同じコードを使用してメモリ バッファに書き込むことができます。そのメモリ バッファを Java に渡して、Stroboskop や Markus Oivisto が言及したような形式をデコードさせることができます。質問を編集して、データを .bmp
ファイルをメモリ内操作に変換する方法を提案できます。