6

カメラと通信して生の画像データをフェッチするC++アプリケーションがあります。次に、C++でByte[]を作成し、JNIを使​​用してJavaに送信します。

ただし、生のByte []を実際のファイル形式に変換する必要があります(.bmpが最初の選択肢でした)。BITMAPFILEINFOとBITMAPHEADERINFOを使用してC++からハードドライブ上のファイルに書き込むと、これを簡単に行うことができますが、フォーマット全体をJavaに送信する方法がわかりません。

次に、JNIを使​​用して生のbyte []データのみを送信し、それを.bmpに変換することを考えましたが、Javaでこれを行うための適切なライブラリが見つからないようです。

私の最良の選択は何でしょうか?画像をC++で変換してから、JNIを使​​用して送信するか、RAWデータをJavaに送信してから、.bmpに変換しますか?これを最も簡単に達成するにはどうすればよいですか?

4

3 に答える 3

7

Java1.5ではたった2行です。

BufferedImage image = ImageIO.read( new ByteArrayInputStream( byteArray ) );
ImageIO.write(image, "BMP", new File("filename.bmp"));

Java(Windowsの場合)は、私が知る限り、jpg、png、bmpをエクスポートする方法を知っています。

于 2009-07-28T12:26:46.587 に答える
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);
}
于 2009-07-28T12:29:58.863 に答える
1

ファイルへの書き込み方法を知っている場合は.bmp、代わりに(ほぼ)同じコードを使用してメモリバッファに書き込むことができます。Javaに出荷して、前述のStroboskopやMarkusKoivistoなどの形式をデコードすることができるメモリバッファ。データをファイルに書き込む方法を含めるように質問を編集した場合、.bmpそれをメモリ内操作に変換する方法を提案できます。

于 2009-07-28T12:58:14.303 に答える