【发布时间】:2017-10-30 22:22:04
【问题描述】:
我正在尝试旋转一堆 BufferedImage 实例,旋转有效,但奇怪的是它们改变了位置。这是我如何做的一个简单的说明。
BufferedImage philo1=ImageIO.read(new File("D:\\philo1.png"));
public void paint(Graphics g)
{
super.paint(g);
Graphics2D g2d = (Graphics2D)g;
AffineTransform old = g2d.getTransform();
g2d.rotate(Math.toRadians(15),philo1.getWidth()/2,philo1.getHeight()/2);
g.drawImage(philo1,172, 48, 50, 50,this);
g2d.setTransform(old);
}
结果是这样的(有和没有旋转):
这可能是什么原因造成的?我怀疑原因是我在绘制图像时强制调整图像的大小,这就是为什么它在不同的位置绘制它,因为我在绘制之前调用了旋转方法。如果是这种情况,我该如何解决?
【问题讨论】:
-
看起来是因为您正在通过角落引用图像。当你旋转它时,画布大小现在变大了。不是相对于角放置图像,而是相对于中心放置它。
-
您不是在旋转图像,而是在旋转组件的整个
Graphics上下文 -
一个更好的解决方案是在它自己的上下文中旋转图像,对于example, something like this。这将生成一个新图像,根据您的需要旋转(和调整大小)
标签: java graphics rotation drawing image-resizing