2014-02-10 50 views
0

我有一個應用程序,它使用鼠標在picbox圖像上自由繪製矩形。但矩形只顯示在picbox後面,而不是在它的頂部。有沒有可以解決這個問題的財產? (在picbox圖片的頂部顯示rect而不是在後面)。下面是代碼:繪製矩形的Z-Index C#

System.Drawing.Graphics picboxGraphics; 
    bool mDown = false; 
    int mouseX; 
    int mouseY; 

    private void pictureBox1_MouseDown(object sender, MouseEventArgs e) 
    { 
     mDown = true; 
     mouseX = e.X; 
     mouseY = e.Y; 
    } 

    private void pictureBox1_MouseMove(object sender, MouseEventArgs e) 
    { 
     if (mDown == true) 
     { 
      this.Refresh(); 
      Pen drawPen = new Pen(Color.Red, 5); 
      int width = e.X - mouseX, height = e.Y - mouseY; 
      Rectangle rect = new Rectangle(mouseX, mouseY, width * Math.Sign(width), height * Math.Sign(height)); 
      picboxGraphics = this.CreateGraphics(); 
      picboxGraphics.DrawRectangle(drawPen, rect); 
     } 
    } 

    private void pictureBox1_MouseUp(object sender, MouseEventArgs e) 
    { 
     mDown = false; 
    } 
+0

您可以簡單地製作位圖並在位圖上繪製,然後設置圖片框的來源。現在,圖片框的內容實際上被設置爲它將始終顯示在其容器上的圖像。 – Franck

+0

我以前沒有使用位圖,但這可能有助於保存修改後的圖像 – ajm

+0

搜索從位圖創建圖形。非常容易,它的做法與您的示例代碼完成相同,除了執行picturebox.draw()它就像MyBitmap.draw()。您可以使用Class'Bitmap'或簡單的'Image',它們都可以直接保存爲流或文件。他們在'System.Image'如果我記得 – Franck

回答

0

您創造從形式是picbox 您可以創建picbox的圖像圖形和成才繪製圖形的背後。但是,如果你想要圖層系統,你可以在透明的圖像上繪製你的圖案併合並它們。用這個vay你可以做一個撤銷或刪除圖層系統。

0

你的代碼有幾個問題:處理,全局變量和錯誤的控制來創建圖形。讓這樣說:

using(var graphics = (sender as Control).CreateGraphics()) 
    graphics.DrawRectangle(drawPen, rect); 

但說實話,你有不同的方式整理(假設你要mimik塗料):

  • 創建新的對象(當鼠標向下)
  • Paint事件繪製對象(如果有的話)
  • 鼠標移動事件期間,更新編輯對象的屬性和調用Invalidate
  • 當你最小化/恢復你的表單時,對象將仍然存在(在你的例子中,它將會丟失)。

可以支持對象的List有許多矩形存儲,並添加歷史支持(TC的Alper Tokcan回答提示)至少Undo最後一個對象。

+0

該代碼可以很好地在pic框上繪製矩形。我需要以某種方式將所有轉換爲位圖,以便我可以保存修改後的圖像。這可能沒有重新安排整個應用程序,因爲你建議>? – ajm

+0

這聽起來像一個新的*問題*,如果您使用搜索,然後[...](http://stackoverflow.com/questions/6845720/how-to-save-picturebox-image-to-file) – Sinatr