カメラと通信して生の画像データを取得するC ++アプリケーションがあります。 私はそれからC ++のByte []を持っています。それをJNIでJavaに送りたいのです。
ただし、生のByte []をに変換する必要があります。実際のファイル形式(.bmpが私の最初の選択でした)。 BITMAPFILEINFOとBITMAPHEADERINFOを使用してC ++からハードドライブ上のファイルに書き込むと、これを簡単に行うことができますが、フォーマット全体をJavaに送信する方法がわかりません。
それから私はJNIを使用して生のbyte []データのみを送信してからそれをに変換することを考えました .bmp、しかしJavaでこれを行うための良いライブラリを見つけることができないようです。
私の最良の選択は何でしょうか?画像をC ++で変換してからJNIを使用して送信するか、RAWデータをJavaに送信してから.bmpに変換しますか。これを最も簡単に達成できるでしょうか。
回答:
回答№1の場合は7これはJava 1.5ではたった2行です。
BufferedImage image = ImageIO.read( new ByteArrayInputStream( byteArray ) );
ImageIO.write(image, "BMP", new File("filename.bmp"));
Java(Windows上)は、私の知る限り、jpg、png、bmpのエクスポート方法を知っています。
回答№2については4
バイト配列を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);
}
回答№3の場合は1
あなたが書く方法を知っていれば .bmp
ファイルにすると、(ほぼ)同じことができます。代わりにメモリバッファに書き込むためのコード。そのメモリバッファをJavaに転送して、StroboskopやMarkus Koivistoのようなフォーマットをデコードさせることができます。質問を編集してデータを .bmp
ファイル、私はそれをインメモリ操作に変換する方法を提案することができます。