【问题标题】:Image is not rotating图像不旋转
【发布时间】:2013-08-16 13:44:45
【问题描述】:

我正在尝试旋转图像,它在某种程度上可以工作,但问题是它无法正常工作。它没有按照我想要的方式旋转。图像以某种混合形式显示。

我的按钮点击代码:

RT90.addActionListener(new ActionListener() 
        {           
            @Override
            public void actionPerformed(ActionEvent arg0) 
            {
                degrees+=90;
                rotateIMG(degrees);
                repaint();
            }
        }); 

rotateIMG() 代码:

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);

    }

知道这段代码中的wrong 是什么吗? 这里a 是从图像堆栈加载的缓冲图像,label 是用于显示图像的JLabel

【问题讨论】:

  • 会不会同时在面板/框架上显示 a 和 b?
  • “图像以某种混合形式显示”对我来说并不是很清楚。你能提供一个屏幕截图吗?当然,SSCCE 也可以。
  • 看看this answer是否可以提供帮助
  • 是的。问题正是您正在覆盖用作源的图像。
  • 一会儿,我将把它作为一个答案。

标签: java swing image-rotation


【解决方案1】:

您正在覆盖用作源的图像 (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);
}

【讨论】:

  • 先生,该代码有效,但问题是图像的某些部分被裁剪意味着旋转后不显示。
  • @user2659972 我只是写了代码,没试过:-P。问题可能是由于图像尺寸发生了变化,GUI 需要在布局中反映这一点。我不知道你的布局是如何工作的,所以我不能确定。
  • 另一个可能的来源是rotate() 调用中使用的翻译。我没有检查它是否正确,而是从你那里复制的。
  • 好的,如果我遇到任何问题,我会自己尝试,然后我会发布并感谢您的支持。
  • 定位可能有点复杂。看看@camickr 发布的链接。
【解决方案2】:

问题是图像的某些部分被裁剪了

查看Rotated Icon。它将计算图标在不同角度旋转时的正确大小。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-22
    相关资源
    最近更新 更多