How to use java.awt.Image on JavaFX Part 2
前回は...
Java API の java.awt.Image から JavaFX API の javafx.scene.image.Image に変換して JavaFX で表示する方法でしたが、今回は その逆...
JavaFX API の javafx.scene.image.Image を java.awt.Image に変換して Java API で利用する方法です。
これも前回同様とっても簡単です。
JavaFX であらかじめ用意されている 以下の API (ドキュメントには載ってないですが...) を利用するだけです。
var fxImage = javafx.scene.image.Image { url: "..." } var image = fxImage.platformImage as java.awt.Image;
ただ一つポイントが...
Image#platformImage 属性は Object 型のインスタンスです。
これは、プラットフォームによりインスタンスの型が異なるからのようです。
デスクトップ 環境の場合は java.awt.Image (java.awt.image.BufferedImage) のインスタンスが取得できます。
モバイル 環境の場合、取得できるインスタンスは java.awt.Image ではないようです。
もちろん、今回はデスクトップ 環境を前提としていますので、安易にキャストしています。
と言うことで...
実際に、これを利用して『Drag and Drop on JavaFX Part 6 (FileDroppable)』 の
サンプルを少し改良してみました。
※ ローカルファイルにアクセスするので、セキュリティの警告がでます。
改良点は...
サムネイルを ローカルストレージに保存しておいて、次回の起動時に表示する。です。コードはこんな感じ...
var storage = Storage { source: "thumbnail_01" } var resource = storage.resource; resource.maxLength = 1 * 1024 * 1024; var os = resource.openOutputStream(true); try { // サムネイル 出力 (今回は JPEG 固定) ImageIO.write(image.platformImage as BufferedImage, "JPEG", os); } finally { os.close(); }ある事情により、今回のサンプルは上記のコードよりもう少し面倒なことをしていますが、その話はまたの機会に...
ローカルストレージの保存ファイルを見てみたら、その謎がわかるかも...