如何使用AffineTransform的翻译?

时间:2015-02-22 19:50:18

标签: java swing awt affinetransform

我不是在问AffineTransform是如何工作的,而是如何使用它的翻译方法。

我多次阅读API,但仍然不明白它是如何工作的。

  

public void translate(double tx,double ty)

     

将此转换与转换转换连接在一起。这相当于调用concatenate(T),其中T是由以下矩阵表示的AffineTransform:

      [   1    0    tx  ]
      [   0    1    ty  ]
      [   0    0    1   ]

问题:

  1. affineTransform.translate(100,0)以某种方式将图像向右移动+100像素,向底部移动+100像素。为什么会这样?

  2. 如果我需要经常移动图像,是否可以使用translate()来移动图像?如果没有,在框架中移动旋转/旋转图像的推荐方法/方法是什么?

1 个答案:

答案 0 :(得分:1)

  

affineTransform.translate(100,0)以某种方式将图像向右移动+100像素,向底部移动+100像素。为什么会这样?

一般来说,是的,它应该将绘图偏移移动到100x和0y,这意味着0x0上下文的Graphics位置现在距离原点100x0 Graphics原始Graphics上下文。

请记住,翻译是累积的,这意味着如果您之前以某种方式翻译了0x100上下文,现在会添加它(第一次翻译100x0,第二次翻译100x100 ,您现在Graphics来自原始Graphics#create上下文来源......

  

如果我需要经常移动图像,是否可以使用translate()来移动图像?如果没有,在框架中移动旋转/旋转图像的推荐方法/方法是什么?

通常,我使用Graphics创建Graphics上下文的副本(这会复制当前状态/属性,但仍会生成输出回dispose的原始输出上下文),将翻译应用于副本,绘制我想要的任何内容,然后dispose副本。这使原始上下文保持不变(关于我已更改的属性)

这意味着您可以单独进行多次翻译,这不会影响以后执行的其他翻译。

另一种方法是反转翻译,但坦率地说,在副本上调用{{1}}只是更简单,更容易......