1

JScrollPane で囲まれた JPanel があります。この JPanel は、画像を表示するために使用されます。zoomIn、zoomOut、clockwiseRotate、antiClockwiseRotate などの機能を提供する必要があります。これらの機能はすべて個別に正常に動作しています。ズームについては、グラフィック オブジェクトのスケールを呼び出します。左上から右下に発生します。回転の場合は、スケールをリセットし、グラフィック オブジェクトを移動、回転、および移動して戻します。しかし、ズームと回転を組み合わせると、動作が異なります。たとえば、時計回りに回転すると、画像は 1.57079633 ラジアン (約 90 度) 回転します。ズームを押すと、画像がズームされますが、ズームは左上と右下ではなく、右上と左下に基づいて行われます。もう一度画像を時計回りに回転させると、ズームがリセットされ、つまり、画像を元のサイズにスケーリングし、translate、rotate、translate をグラフィックス オブジェクトに戻します。もう一度ズームを押すと、右下と左上に基づいてズームインします。

したがって、問題は、パネルの座標が変更されたときに画像の座標が変更されないことです。誰かが画像の座標を変更するのを手伝ってくれますか?

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 に答える