代码:
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轴?
答案 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();