0

代码:

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 轴?

4

1 回答 1

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();
于 2013-06-09T16:32:04.420 回答