1

我希望能够缩放和取消缩放由 Path2D.Double 制成的 Java2D 场景,而无需加粗线条,只需扩大距离即可。

我尝试对 paintComponent 方法接收的 Graphics2D 对象应用转换,但这会使线条变粗。我发现的唯一方法是对线条应用转换(line.transform(AffineTransform.getScaleInstance(2d,2d))例如),但每次我再次缩放和取消缩放时,我都会因为浮点错误而丢失信息。

长话短说:这些转变是破坏性的。有没有办法说“我想在不修改行内容的情况下应用该转换来绘制这条线”?

4

2 回答 2

1

我找到了解决方案:我根据 Graphic2D 中的比例因子更改线宽,这样我可以将变换应用于 Graphic2D 本身,并且不会破坏 Path2D 中包含的原始坐标。

tr = g.getTransform()
g.transform(AffineTransform.getScaleInstance(scaleFactor,scaleFactor))
g.setStroke(new java.awt.BasicStroke(1.0f/scaleFactor.toFloat))
/* draw lines */
g.setTransform(tr)
于 2010-07-16T05:46:16.820 回答
0

正如您所发现的,更改Graphics2D变换会影响所有绘图,但没有什么能阻止保存、修改和恢复内部的变换paintComponent()。在此示例中,内容是在缩放的上下文中绘制的,而Rectangle.Double目标对象周围的内容是未缩放的。

附录:该示例使用显式转换,但您可以使用AffineTransform, 代替。像Rectangle2D,Path2D实现了Shape接口,所以你可以相应地使用createInverse()and createTransformedShape()。这是一个相关的例子

于 2010-07-14T19:20:11.567 回答