1

我有一个 JScrollPane 包围的 JPanel。此 JPanel 用于显示图像。我需要提供 zoomIn、zoomOut、顺时针旋转和 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);
    }    
} 
4

1 回答 1

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);
    }     
}
于 2012-04-10T06:02:40.910 回答