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发布的链接。