2012-05-29 117 views
1

我正在嘗試使用鼠標滾輪放大圖片框。 使用下列變量:PictureBox縮放失算

public static int offsetX = 0; 
public static int offsetY = 0; 
public static double scale = .05; 

我畫了一系列的多邊形的圖片框。但是,我希望左下角指向0 ,,所以我用-y繪製所有的表單。所繪製點數已受上述變量的影響,但真實點保持不變。

void pictureBox1_MouseWheel(object sender, MouseEventArgs e) 
{ 
    if (e.Delta > 0) 
     scale += .025; 
    else 
     scale -= .025; 

    pictureBox1.Invalidate(); 
} 

當鼠標滾輪向前移動時,我增加了比例變量和框被刷新。它在PictureBox的paint方法使用此代碼粉刷:

 Graphics g = e.Graphics; 
    foreach (Member m in activeTruss.members) 
    { 

     if (m.Visible == true) 
     { 
      Point[] pointArray = new Point[m.poly.Points.Count()]; 
      int index = 0; 

      foreach (System.Windows.Point p in m.poly.Points) 
      { 

       pointArray[index].X = (int)((p.X + offsetX) * scale); 
       pointArray[index].Y = (int)-((p.Y + offsetY) * scale); 
       index++; 
      } 

      SolidBrush myBrush = new SolidBrush(m.color); 
      g.FillPolygon(myBrush, pointArray); 
     } 
    } 

它放大正確的量,但是它似乎向左上角放大,因爲偏移量保持不變。縮小時相反。當我轉動鼠標滾輪以便直接縮放到鼠標下方的位置時,應該如何編輯偏移量?

+0

發佈您的代碼。 –

+5

+1,對於這個問題,反對票有點苛刻,即使沒有代碼,集中的概念是普遍的,因爲在問題中已經提供了什麼 – Joe

+0

規模上的'f'是不必要的,只是向編譯的代碼添加更多的命令。 (單個[浮動]轉換爲雙倍) –

回答

0

如果要居中你變焦

double offsetX = scale/2 
double offsetY = scale/2 

更新

要獲得關於翻轉圖片第二部分,它聽起來就像你都賺不到的在X區分,Y你圖片與x,y屏幕座標。通常,屏幕座標從屏幕頂部開始,因此左上角是0,0,但是當您繪製圖片時,圖片的0,0位於左下角,因此您使用-y。你想要做的是開始繪製從0,0到0,MAXY沒有翻轉。對於此實現細節,您的代碼將幫助很多嘿:)

+2

這可能適用於我上面發佈的代碼。然而,我還有其他的複雜問題,比如繪製到畫框上的所有東西都會翻轉過來。我應該將這些信息和代碼添加到問題中,還是在像這樣的評論中詳細說明? – jth41

+1

將它添加到您的問題中,如果它與您的第三方渲染軟件有關,那麼我可能無法提供幫助...很好,讓大家看到 – Joe