次の問題があります。私は基本的に生データとして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を使用してJavaコード内のC++オブジェクトを参照できますか?
- 4. 既存のCソースファイルへのアクセスJava JNIを使用して
- 5. GDIを使用してHBITMAPをPNGイメージとして保存しますか?
- 6. json storeを使用してイメージをロード
- 7. C++でbyte [] []を作成し、JNIを使用してJavaに戻す
- 8. SDL、OpenGL、およびC++を使用して、どのように透明な.pngイメージをロードできますか?
- 9. ユニットテストJavaを使用したC++コード
- 10. JNIを使用してC構造体をJavaに転送する方法は?
- 11. C#でGDCMライブラリを使用してDICOMイメージをロードし、System.Windows.Control.Imageに変換
- 12. BufferedImage + jPanel Qtを使用してC++でイメージを表示するのと同等の方法
- 13. C#コードを使用してascxコンポーネントをロードする
- 14. PHPのPOSTデータを使用してJavaに.pngをサーバーにアップロード
- 15. Javaからイメージを取得し、MIMEタイプをチェックしてからpngに変換してそのイメージを返す
- 16. JNIを使用してJavaでC++抽象クラスをサブクラス化する
- 17. イメージCを使用して取得
- 18. masonry.jsを使用してイメージをロードすることについて
- 19. Native C/C++コードを使用してAndroidアプリを公開する
- 20. mutexを使用するCコードとJavaコードの別の同期メソッドをJNIで使用する
- 21. java-jniを使用した調光
- 22. enyo.jsを使用してキャッシュにイメージをロードする
- 23. PNG(透明)イメージと背景色を使用してカスタムブラシを作成する
- 24. JNI Java byte []をC++ bytearrayに変換して返す0
- 25. Javaイメージはすぐにリソースとしてロードされません。
- 26. JQueryを使用してHTMLにコードをロードしますか?
- 27. xaml canvasをRenderTargetBitmapを使用してpngに変換する空白イメージ
- 28. JNIを使用しているときにC++でJava例外の説明を取得する方法は?
- 29. .NET ReportViewerレポートサーフェスにPNGイメージ(メモリストリームとして)をレンダリングする方法
- 30. BufferedImageをPrintableに変換してprintJobを使用する方法
私は実際にそれをやった後、私はそれを行う方法を読んでいえねえチャドは、コメントを おかげで、これは、私がやってしまった、まさに実際に:) – ldog