现在我正在为我的 canvas
节点获取 GraphicsContext
并尝试一个
gc.scale(2, 2);
在我的 canvas
上,我有几十种方法可用。所以我知道必须要放大一些东西。但是我的尝试没有产生明显的“增长”或“缩放”。我需要调用什么才能应用或重绘它吗?
最佳答案
我认为 gc.scale(2,2)
会将您在 Canvas 上绘制的下一个内容缩放为 2,而不是您已经绘制的现有内容。
如果你想缩放 Canvas ,你可以在 Canvas 上设置一个转换,而不是图形上下文。
canvas.setScaleX(2);
canvas.setScaleY(2);
如果您希望缩放的 Canvas 反射(reflect)在布局管理器的布局计算中,那么您可以将其包装在一个组中,如果您想在缩放的 Canvas 上产生类似缩放的效果,其中部分 Canvas 被剪裁,那么您可以将 Canvas 放在 ScrollPane 中并为其定义视口(viewport),或者在 Canvas 节点上设置剪辑。
更新以讨论像素化问题
为了避免放大时的像素化问题,我认为您需要记录迄今为止绘制的所有图形命令,然后当您想要更改缩放系数时,清除 Canvas ,应用新比例到 Canvas ,然后重播所有图形命令。也许可以使用 svg 之类的格式来记录图形命令。
或者您可以只使用场景图并绘制到场景图而不是 Canvas ,这样您也不会有像素化问题。
我认为这里需要注意的重要一点是 Canvas 应该是一种即时模式即发即忘的东西,而不是像场景图那样的保留模式绘图服务。
关于java - 如何放大 JavaFX 2 Canvas 节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12523033/