在java中旋转图像
我正在寻找旋转图像。我有一个 JInternalFrame
,其中包含一个 JLabel
。标签包含图像。旋转图像后,我需要调整内部框架的大小。我当前的代码旋转图像,但图像边缘周围有黑色并且偏离中心。关于如何解决这个问题有什么建议吗?
public void rotateIcon(int angle)
{
int w = theLabel.getIcon().getIconWidth();
int h = theLabel.getIcon().getIconHeight();
int type = BufferedImage.TYPE_INT_RGB; // other options, see api
BufferedImage DaImage = new BufferedImage(h, w, type);
Graphics2D g2 = DaImage.createGraphics();
double x = (h - w)/2.0;
double y = (w - h)/2.0;
AffineTransform at = AffineTransform.getTranslateInstance(x, y);
at.rotate(Math.toRadians(angle), w/2.0, h/2.0);
g2.drawImage(new ImageIcon(getData()).getImage(), at, theLabel);
g2.dispose();
theLabel.setIcon(new ImageIcon(DaImage));
this.setSize(DaImage.getWidth(),DaImage.getHeight()); //resize the frame
}
I am looking to rotate an image. I have a JInternalFrame
which contains a JLabel
. The label contains the image. After the image has been rotated, I need to resize the internal frame. The code I have currently rotates the image, but there is black around the edges of the image and it is off centered. Any suggestions on how to fix this?
public void rotateIcon(int angle)
{
int w = theLabel.getIcon().getIconWidth();
int h = theLabel.getIcon().getIconHeight();
int type = BufferedImage.TYPE_INT_RGB; // other options, see api
BufferedImage DaImage = new BufferedImage(h, w, type);
Graphics2D g2 = DaImage.createGraphics();
double x = (h - w)/2.0;
double y = (w - h)/2.0;
AffineTransform at = AffineTransform.getTranslateInstance(x, y);
at.rotate(Math.toRadians(angle), w/2.0, h/2.0);
g2.drawImage(new ImageIcon(getData()).getImage(), at, theLabel);
g2.dispose();
theLabel.setIcon(new ImageIcon(DaImage));
this.setSize(DaImage.getWidth(),DaImage.getHeight()); //resize the frame
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
更改为
如果将BufferedImage DaImage = new BufferedImage(height, width, type);
BufferedImage
DaImage = new BufferedImage(**width, height**, type);< /代码>?
Does it help if you change:
BufferedImage DaImage = new BufferedImage(height, width, type);
to:
BufferedImage DaImage = new BufferedImage(**width, height**, type);
?您需要使用三角学来确定正确的宽度/高度,使用透明度来防止黑色区域,我认为变换是错误的,这使其偏离中心。
试试这个:
来自 http: //flyingdogz.wordpress.com/2008/02/11/image-rotate-in-java-2-easier-to-use/
You need to be using trigonometry to determine the correct width/height, using transparency to prevent the black area, and I think the Transform is wrong, which is making it off center.
Try this:
from http://flyingdogz.wordpress.com/2008/02/11/image-rotate-in-java-2-easier-to-use/
您可以尝试使用旋转图标。
You could try using a Rotated Icon.
基于前面的示例,但实际上使用最新的 JDK 并在无头模式下工作:
Based on a previous example, but actually working with recent JDKs and in headless mode: