为了账号安全,请及时绑定邮箱和手机立即绑定

层是在 JavaFX 画布上合成图形的唯一方法吗?

层是在 JavaFX 画布上合成图形的唯一方法吗?

哆啦的时光机 2021-08-06 11:23:26
我正在 JavaFX 中处理一个 gui,它需要在画布上合成大量对象(通常使用 alpha 蒙版和类似的)。为了在 HTML5 画布上进行比较,这可以通过drawImage函数在 DOM 结构之外的临时画布对象的帮助下轻松完成。例如,要在带有 alpha 蒙版的画布上绘制图像,我首先在临时画布上绘制图像,使用 绘制(即 blit)蒙版在其上globalCompositeOperation = "destination-in",然后使用复合模式在原始画布上绘制临时画布source-over。临时画布可以重新用于每个此类操作。非常简单。但是,从目前我所看到的,在 JavaFX 中推荐的这样做的方法是使用分组层,即多个叠加的画布节点,它们永远不会“变平”。我也可以在 HTML5 中这样做,但在我最近的项目中,这会导致数十或数百个可见层,这显然非常愚蠢。我的方法给了我出色的表现。话虽如此,有没有一种合理的方法可以在 JavaFX 画布上做同样的事情?我认为手动执行逐像素复制是笨拙的最后手段。我错过了什么?我是否以错误的方式思考 JavaFX?
查看完整描述

1 回答

?
长风秋雁

TA贡献1757条经验 获得超7个赞

我之前在 JavaFx 和 Android 上做过这个我不知道他们在 HTML 5 上这样

做所以无论如何你可以像在 HTML 5 上做的一样你可以创建所谓的mainCanvas画布包含另一个的完成版本让我们说tempCanvas在临时画布上绘制你想要什么都和应用所需得那么面具你把画布上的快照(作为Canvas是一个Node你可以使用这个代码利用它的快照)


WritableImage writableImage = new WritableImage(mainCanvas.getWidth(), mainCanvas.getHeight());

tempCanvas.snapshot(null, writableImage);


GraphicsContext context = mainCanvas.getGraphicsContext2D();

context.drawImage(writableImage,mainCanvas.getWidth(), mainCanvas.getHeight());


查看完整回答
反对 回复 2021-08-06
  • 1 回答
  • 0 关注
  • 163 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号