Java 图像没有旋转
我正在尝试旋转一个图像,虽然它可以工作,但问题是它不能正常工作。它没有以我想要的速度旋转。图像以某种混合形式显示 单击按钮时的我的代码:Java 图像没有旋转,java,swing,image-rotation,Java,Swing,Image Rotation,我正在尝试旋转一个图像,虽然它可以工作,但问题是它不能正常工作。它没有以我想要的速度旋转。图像以某种混合形式显示 单击按钮时的我的代码: RT90.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { degr
RT90.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent arg0)
{
degrees+=90;
rotateIMG(degrees);
repaint();
}
});
旋转代码:
public void rotateIMG(double d)
{
BufferedImage b ;
b=a;
Graphics g;
g=b.createGraphics();
Graphics2D g2d = (Graphics2D)g;
System.out.println(b.getWidth());
System.out.println(b.getHeight());
g2d.rotate(Math.toRadians(d), b.getWidth()/2, b.getHeight()/2);
g2d.drawImage(b,0,0,null);
ImageIcon rtimg = new ImageIcon(b);
label.setIcon(rtimg);
}
知道这段代码出了什么问题吗?
这里a是从图像堆栈加载的缓冲图像,标签是JLabel用来显示图像的。您正在覆盖用作源b==a的图像。您需要创建一个新的
public void rotateIMG(double d) {
// Consider also using GraphicsConfiguration.createCompatibleImage().
// I'm just putting here something that should work
BufferedImage b = new BufferedImage(a.getHeight(), a.getWidth(), BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = b.createGraphics();
g2d.rotate(Math.toRadians(d), a.getWidth()/2, a.getHeight()/2);
// Note the a instead of b here
g2d.drawImage(a, 0, 0, null);
// Do you want to keep the old a or not?
// a = b;
ImageIcon rtimg = new ImageIcon(b);
label.setIcon(rtimg);
}
您正在覆盖用作源b==a的图像。您需要创建一个新的
public void rotateIMG(double d) {
// Consider also using GraphicsConfiguration.createCompatibleImage().
// I'm just putting here something that should work
BufferedImage b = new BufferedImage(a.getHeight(), a.getWidth(), BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = b.createGraphics();
g2d.rotate(Math.toRadians(d), a.getWidth()/2, a.getHeight()/2);
// Note the a instead of b here
g2d.drawImage(a, 0, 0, null);
// Do you want to keep the old a or not?
// a = b;
ImageIcon rtimg = new ImageIcon(b);
label.setIcon(rtimg);
}
问题是图像的某些部分被裁剪了
退房。当图标以不同角度旋转时,它将计算图标的正确大小
问题是图像的某些部分被裁剪了
退房。当图标以不同的角度旋转时,它将计算出图标的正确大小。可能是您同时在面板/框架上显示a和b吗?图像以某种混合形式显示,我不太清楚。你能提供一个屏幕截图吗?当然,SSCCE也可以。看看能不能帮上忙。问题是,您正在覆盖用作源的图像。稍后,我将对此作出解释。是否您在面板/框架上同时显示A和b?图像以某种混合形式显示我并不清楚。你能提供一个屏幕截图吗?当然,SSCCE也可以。看看能不能帮上忙。问题是您正在覆盖用作源的图像。稍后,我将对此作出解释。先生,该代码可以工作,但问题是图像的某些部分被Cropped表示旋转后它不会显示。@user2659972我刚刚编写了代码,没有尝试过:-P。问题可能是,由于图像尺寸改变,GUI需要在布局中反映这一点。我不知道你的布局是如何工作的,所以我不能确定。另一个可能的来源是rotate调用中使用的翻译。我没有检查它是否正确,但从你那里复制了它。好的,我会自己尝试,如果我遇到任何问题,然后我会发布,感谢你的支持。定位可能有点复杂。请看@camickr.sir发布的链接,该代码起作用,但问题是图像的某些部分被截断意味着旋转后它不会显示。@user2659972我只是编写了代码,没有尝试过:-P。问题可能是,由于图像尺寸改变,GUI需要在布局中反映这一点。我不知道你的布局是如何工作的,所以我不能确定。另一个可能的来源是rotate调用中使用的翻译。我没有检查它是否正确,但从你那里复制了它。好的,我会自己尝试,如果我遇到任何问题,然后我会发布,感谢你的支持。定位可能有点复杂。请看@camickr发布的链接。