Java Swing旋转和缩放

时间:2012-04-09 10:15:30

标签: java swing java-2d

我有一个用JScrollPane包围的JPanel。此JPanel用于显示图像。我需要提供zoomIn,zoomOut,clockwiseRotate和antiClockwiseRotate等功能。所有这些功能都可以单独使用。对于缩放,我调用图形对象的比例。它发生在左上角到右下角的基础上。为了轮换,我重置了比例,并翻译,旋转&翻译图形对象。但是当我将缩放与旋转相结合时,它的行为会有所不同。例如,我顺时针旋转,图像旋转到1.57079633弧度(约90度)。现在,当我按变焦时,图像会变焦,但变焦会根据右上角和左下角而不是左上角和右下角来进行。如果我再次以顺时针方向旋转图像,我会重置缩放,即我将图像缩放到原始大小并调用平移,旋转和平移图形对象。现在,如果我再次按变焦,它会根据右下角和左上角放大。

因此问题是当面板坐标改变时,图像的坐标不会改变。有人可以帮我改变图像的坐标吗?

public void paint(Graphics g)
{     
    Graphics2D g2d = (Graphics2D)g;
    g2d.translate((tempWidth/2), (tempHeight/2));
    g2d.rotate(m_rotate);
    g2d.translate(-(tempWidth/2), -(tempHeight/2));
    g2d.scale(m_zoom, m_zoom); 
    if(this.image != null && this.image.getHeight(null) > 0)
    {
        g2d.drawImage(this.image, 0, 0,302,312,this);         
    } 
    else
    {
        g2d.drawString("View Image Here!. ", 20, 20);
    }    
} 

1 个答案:

答案 0 :(得分:0)

感谢您的帮助。它让我思考了一个帮助我解决问题的新维度。我所做的只是在旋转前缩放图像,现在运行良好。

public void paint(Graphics g) 
{          
    Graphics2D g2d = (Graphics2D)g; 
    g2d.scale(m_zoom, m_zoom);//This is what made the magic    
    g2d.translate((tempWidth/2), (tempHeight/2));     
    g2d.rotate(m_rotate);     
    g2d.translate(-(tempWidth/2), -(tempHeight/2)); 
    /*g2d.scale(m_zoom, m_zoom); removed this and placed above */
    if(this.image != null && this.image.getHeight(null) > 0)     
    {         
        g2d.drawImage(this.image, 0, 0,302,312,this);
    }
    else
    {         
        g2d.drawString("View Image Here!. ", 20, 20);
    }     
}