仿射变换和图形2D绘图位置

时间:2013-06-08 22:38:11

标签: java graphics transform graphics2d affinetransform

代码:

AffineTransform at = new AffineTransform();
at.scale(2, 1);
at.rotate(Math.toRadians(45));
at = new AffineTransform(at);
at.translate(-img.getWidth()/2, -img.getHeight()/2);
g2D.setTransform(at);
g2D.drawImage(img, 0, 0, null);
g2D.drawImage(img, 16, 0, null);
g2D.drawImage(img, 32, 0, null);
g2D.dispose();

这会在[0,0],[16,8],[32,16]位置绘制我的图像(原始大小为16x16)。 即它采用现在被转换的原始轴并将其绘制在变换后的坐标上。

然而,我并不总是想要这个。 如何在我输入的精确坐标处显示图像,忽略变换后的X轴和Y轴?

1 个答案:

答案 0 :(得分:0)

在将Graphics2d对象设置为新变换之前,您需要保存变换,这样您就可以在完成变换后切换到原始参考系统。

AffineTransform at = new AffineTransform();
AffineTransform g2dAffineTransform = g2d.getTransform();
at.scale(2, 1);
at.rotate(Math.toRadians(45));
at = new AffineTransform(at);
at.translate(-img.getWidth()/2, -img.getHeight()/2);
g2D.setTransform(at);
g2D.drawImage(img, 0, 0, null);
g2D.drawImage(img, 16, 0, null);
g2D.drawImage(img, 32, 0, null);

//Reset the transform
g2d.setTransform(g2dAffineTransform);
//All rendering with this g2d is now at the original coordinate system
//g2d.draw...
g2D.dispose();