myNode: scalafx.scene.Node
ディスクに保存したり、他のビットマップと比較したりできるように、ビットマップに変換したい があります。それを に変換する正しいコードscalafx.scene.image.WritableImage
は
val writableImg = new Scene { root = new Group(myNode) }.snapshot(null)
java.awt.image.RenderedImage
そして、それをwithに変えることができるはずです
val renderedImg = SwingFXUtils.fromFXImage(writableImg, null)
問題は、お気づきかもしれませんが、コードを実行wrImg
して ScalaFX スレッドにアクセスする必要があることです。値を返す方法を説明する質問がここにありますが、それを Scala に変換する運がありません。私はこれを試しました:
lazy val writableImg: WritableImage = {
val wrImg = new FutureTask(new Callable[WritableImage]() {
override def call(): WritableImage = {
new Scene { root = new Group(myNode) }.snapshot(null)
}
})
Platform.runLater(wrImg)
wrImg.get()
}
しかし、コードはハングするだけで完了しません。誰でも慣用的な Scala バージョンを提供したり、コードが返されない理由を教えてもらえますか?