2016-01-08 22 views
1

我想創建自定義控件或覆蓋pictuebox的onpaint事件,這樣我就可以在圖片被繪製之前訪問圖片,這樣我就可以旋轉圖片。覆蓋Picturbox OnPaint事件來旋轉圖像 - 創建自定義圖片盒

我知道我可以做這樣的事情

private void pictureBox1_Paint(object sender, PaintEventArgs e) { 

    e.Graphics.DrawRectangle(Pens.Black, new Rectangle(10, 10, 20, 20)); 
} 

如何獲得訪問圖像,以及如何創建一個自定義的控制。

+0

我不認爲圖像獲取OnPaint方法繪製;也不BackgroundImage ..這些真的是三個不同的東西,或顯示水平。但我想你可以隱藏圖像屬性並將其替換爲您自己的圖像。 – TaW

回答

3

這裏是一個子類的一個簡單的例子:它隱藏了原來Image屬性,並使用一個分配給它之前做了旋轉替代它:

class RotatedPictureBox : PictureBox 
{ 

    private Image image; 

    public new Image Image { 
     get { return image; } // ?? you may want to undo the rotation here ?? 
     set { 
       Bitmap bmp = value as Bitmap ; 
       // use the rotation you need! 
       if (bmp != null) bmp.RotateFlip(RotateFlipType.Rotate270FlipX); 
       image = bmp; 
       base.Image = Image; 
      } 
     } 


    } 
    public RotatedPictureBox() 
    { 
    } 
} 

買者:指派圖像似乎工作,但我沒有測試它的所有可能的用途..已知限制

  • 它不旋轉圖像分配通過ImageLocation
  • 我在設計器中分配圖像時發生了一次崩潰,但無法重現。
+0

我能夠重現該問題位圖bmp =值爲位圖;在初始運行代碼時拋出空引用異常。最初不設置此屬性。 – techno

+0

可以使用'DesignMode'屬性來排除一些行,當然也可以檢查'value!= null'。 – TaW

+0

你可以請http://chat.stackoverflow.com/rooms/100141/picturebox-c – techno