8

现在我正在GraphicsContext为我的canvas节点抓取并尝试

gc.scale(2, 2);

在我canvas的身上,我有几十种方法可用。所以我知道必须有一些东西可以放大。但是我的尝试没有产生明显的“增长”或“缩放”。我需要打电话来应用或重绘它吗?

4

1 回答 1

7

我认为这gc.scale(2,2)会将您在画布上绘制的下一个内容缩放 2 倍,而不是您已经绘制的现有内容。

如果要缩放画布,可以在画布上设置变换,而不是图形上下文。

canvas.setScaleX(2);
canvas.setScaleY(2);

如果您希望缩放的画布反映在布局管理器的布局计算中,那么您可以将其包装在一个组中,并且如果您想在裁剪部分画布的缩放画布上进行类似缩放的效果,那么您可以将ScrollPane 中的画布并为其定义视口或在画布节点上设置剪辑。

更新讨论像素化问题

为避免放大时出现像素化问题,我认为您需要记录迄今为止绘制的所有图形命令,然后当您要更改缩放因子时,清除画布,将新比例应用于画布,然后重播所有图形命令。也许像 svg 这样的格式可以用来记录图形命令。

或者您可以只使用场景图并绘制到它而不是画布,那么您也不会遇到像素化问题。

我认为这里需要注意的重要一点是,canvas 应该是一种即时模式触发和忘​​记的东西,而不是像场景图这样的保留模式绘图服务。

于 2012-09-21T01:46:28.647 回答