我不是在问AffineTransform是如何工作的,而是如何使用它的翻译方法。
我多次阅读API,但仍然不明白它是如何工作的。
public void translate(double tx,double ty)
将此转换与转换转换连接在一起。这相当于调用concatenate(T),其中T是由以下矩阵表示的AffineTransform:
[ 1 0 tx ] [ 0 1 ty ] [ 0 0 1 ]
问题:
affineTransform.translate(100,0)以某种方式将图像向右移动+100像素,向底部移动+100像素。为什么会这样?
如果我需要经常移动图像,是否可以使用translate()来移动图像?如果没有,在框架中移动旋转/旋转图像的推荐方法/方法是什么?
答案 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}}只是更简单,更容易......