java - 如何放大 JavaFX 2 Canvas 节点?

标签 java javafx-2 scale

现在我正在为我的 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/

相关文章:

java - 由于 xml 签名错误

java - spring 集成 inboundChannelAdapter 一次生成多条消息?

javascript - 快速帮助扩展网站

javascript - 按百分比缩放 div 的内容?

c++ - 缩放 QTableWidget

java - 获取 JDBC 连接时出错 : Could not enlist in transaction on entering meta-aware object

java - 正则表达式: the string must contains sequence of words

java - 如何用一条线连接两个节点

java - 打印按键事件

Java:在当前目标上应用样式的方法