我有一个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 版本和/或告诉我为什么代码永远不会返回?