我有一个用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);
}
}
答案 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);
}
}