如何在JavaFX 2 Canvas节点上进行缩放?

7

现在我正在获取我的canvas节点的GraphicsContext并尝试执行

gc.scale(2, 2);

在我的canvas上有几十种可用的方法。所以我知道肯定有一些可以进行缩放的方法。然而,我的尝试并没有产生明显的“增长”或“缩放”。是否需要调用某些方法才能使其应用或重新绘制?

1个回答

7
我认为gc.scale(2,2)会将你在画布上绘制的下一件事物按比例缩放两倍,而不是已经绘制的现有内容。
如果要缩放画布,可以在画布上设置变换,而不是在图形上下文中设置。
canvas.setScaleX(2);
canvas.setScaleY(2);

如果您希望缩放的画布在布局管理器的布局计算中得到反映,可以将其包装在一个Group中;如果您想在缩放的画布上实现类似缩放的效果,其中部分画布被裁剪,则可以将画布放置在ScrollPane中并为其定义视口,或者在画布节点上设置剪辑。
更新以讨论像素化问题
为了避免放大时出现像素化问题,我认为您需要记录到目前为止绘制的所有图形命令,然后当您想要更改缩放因子时,清除画布,将新比例应用于画布,然后重新播放所有图形命令。也许可以使用类似SVG的格式来记录图形命令。
或者您可以直接使用场景图并在其中进行绘制,这样也不会出现像素化问题。
我认为这里需要注意的重要事项是,画布应该是一种即时模式的快速绘制工具,而不是像场景图那样的保留模式绘图服务。

抱歉关于格式...不确定如何在评论中格式化代码? - ril3y
您可以在此视频的3:36处看到它是如何工作的。 http://www.youtube.com/watch?v=kdJZbVO4E4Q&feature=g-upl - ril3y
更新的答案。感谢视频,这有助于理解问题。此外,您可以使用 反引号格式化评论中的代码 - jewelsea
Jewelsea, 我之前使用Group fxml元素添加线条。然而,似乎在JavaFX 2.2中已经更改了它。你有什么建议可以让它再次正常工作? - ril3y
如果您希望缩放的画布在布局管理器的布局计算中得到反映,那么可以将其包装在一个 Group 中。 - Andrea Vacondio
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接