質問

カメラと通信して生の画像データを取得する 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 ファイルをメモリ内操作に変換する方法を提案できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top