次の問題があります。私は基本的に生データとしてPNG画像を取得し、メモリに保持するCコードを持っています。この生データをJNIを使用してJavaのBufferedImageに変換することをお勧めします。誰でもこれを行う方法を知っているのですか、これを前に行っていますか?JNI Cコードを使用してJavaにBufferedImageとしてPNGイメージをロード
答えて
JNIで関数を呼び出す方法の基本を知っているとします。それは複雑なことではありませんが、それはお尻の痛みになる可能性があります。
すぐに処理したい場合は、一時ファイルにPNGを書き込み、ファイル名をJNIに渡してImageIOを使用して読み込みます。
さらに洗練されたファイルパスが必要ないようにするには、ImageIO.read(InputStream)をByteArrayInputStreamで使用して、JNI経由で渡すバイト配列をラップします。 CからNewByteArray()を呼び出し、SetByteArrayRegionを使用してデータを設定することができます。
最後に、小さなWebサーバーを含むApache has a set of components you can useのHTTPを使用して、CコードからJavaにPOSTすることができます。
以前にJNIを使用したことがない場合は、JNI Programmer's Guide and Specificationをご覧ください。要約で
、何をしなければならないことは次のとおりです。
- なしの実装で、
native
キーワードでJavaメソッドを作成します。 - ネイティブメソッドのクラスで
javah
コマンドを使用して、ヘッダーファイル(.h)を生成します。javah
にはJDKがインストールされています。 - C/C++でネイティブJava関数を実装します。
- 検索するクラスjava.awt.image.BufferedImage。
- 検索するコンストラクタを使用します。
- 指定されたコンストラクタでBufferedImageオブジェクトを作成します。
- 検索setPixelメソッド。
- 画像内の各ピクセル値を設定する方法を実行します。それを実行する必要があります x 幅回。
- オブジェクトを返します。
- 共有ライブラリにコンパイルします。
- Javaクラス内に共有ライブラリをロードします。
- 共有ライブラリをリンクしていることを示すJavaクラスを実行します。
画像の生データをコピーする方法は他にもありますが、この方法で十分であるはずです。
返信いただきありがとうございます、私は別のやり方でやりました。 – ldog
JavaライブラリはPNGをサポートしているので、CからJavaへのすべてのバイトをコピーし、ImageIOクラスを使用するメカニズムを追加します(Chad Okere)。
また、JNAを使用して生活を楽にすることを検討してください(example using JNA to draw a Windows cursor)。
ねえ、 幸い、私は何のためにWindowsを使用していないので、私は、 JNAは使用できません。頭をアップしてくれてありがとう、もし私が窓に戻ったら、それは役に立つと思う。 – ldog
- 1. JNIを使用してJavaでC#コードを呼び出す
- 2. JNIを使用して別のJNIライブラリをロードしますか?
- 3. JNIを使用してC++で.jarファイルをロード
- 4. JNIを使用してJavaにC++クラスメンバー関数をバインド
- 5. JNIを使用してJavaコード内のC++オブジェクトを参照できますか?
- 6. JavaコードをCまたはC++コードに変更してAndroid JNIで使用する方法
- 7. 既存のCソースファイルへのアクセスJava JNIを使用して
- 8. Javaを使用してPNGイメージをグレースケールに変換するには?
- 9. C++でbyte [] []を作成し、JNIを使用してJavaに戻す
- 10. GDIを使用してHBITMAPをPNGイメージとして保存しますか?
- 11. json storeを使用してイメージをロード
- 12. go - Ginを使用してイメージをロード
- 13. ユニットテストJavaを使用したC++コード
- 14. SDL、OpenGL、およびC++を使用して、どのように透明な.pngイメージをロードできますか?
- 15. Javaランタイムとプロセスクラスを使用してCコードとネイティブインタフェースを使用して実行する
- 16. BufferedImageがpngからロードされていません
- 17. JNIを使用してC構造体をJavaに転送する方法は?
- 18. C++コードとJNIのみを使用してAndroidスタジオでOpenGLESを使用したシンプルなトライアングルを描画
- 19. イメージをファイルとしてロード
- 20. ?Javaコードを使用して
- 21. C#でGDCMライブラリを使用してDICOMイメージをロードし、System.Windows.Control.Imageに変換
- 22. MVCのstaスレッドを使用してpngイメージをダウンロード
- 23. ウィンドウを使用してopenglのpngイメージを回転する
- 24. BufferedImage + jPanel Qtを使用してC++でイメージを表示するのと同等の方法
- 25. Java BufferedImageのロードが機能していません|パス
- 26. JNIを使用してJavaでC++抽象クラスをサブクラス化する
- 27. JNI jobjectarray(Java String [])を使用してC++ char []を埋める方法は?
- 28. c#htmlコードでressourceイメージを使用してください
- 29. PHPのPOSTデータを使用してJavaに.pngをサーバーにアップロード
- 30. C#コードを使用してascxコンポーネントをロードする
私は実際にそれをやった後、私はそれを行う方法を読んでいえねえチャドは、コメントを おかげで、これは、私がやってしまった、まさに実際に:) – ldog