2014-12-17 5 views

답변

1

내 솔루션은 새로운 클래스 :

당신이 모양이 다시 만들어집니다 객체를 무효화 할 때마다
class ShapedPictureBox : PictureBox 
{ 
    public ShapedPictureBox() 
    { 

    } 

    public Color transparentColor = Color.White; 

    public void updateShape() 
    { 
    if(this.Image = null) return; 
    Bitmap bitmap = new Bitmap(this.Image); 
    System.Drawing.Drawing2D.GraphicsPath graphicsPath = new System.Drawing.Drawing2D.GraphicsPath(); 
    for(int x = 0; x < this.Image.Width; x++) 
     for(int y = 0; y < this.Image.Height; y++) 
      if(transparentColor != bitmap.GetPixel(x, y)) 
       graphicsPath.AddRectangle(new Rectangle(new Point(x, y), new Size(1, 1))); 
    this.Region = new Region(graphicsPath); 
    } 
} 

. 나는이 해결책이 전혀 효과가 없다는 것을 알고 있지만 발견 한 유일한 것입니다. 누군가가 도움이 되었기를 바랍니다.

더 효율적이고 효과적인 아이디어가 있다면 알려 주시기 바랍니다.

+1

단순히 bitmap.MakeTransparent (Color.White)를 사용하십시오. –

+1

적어도 개선하기 위해 모든 무효화로 영역 생성을 트리거하지 않는 것입니다! 무효화는 귀하가 제어하지 않습니다. 시스템이 필요하다고 생각할 때마다 폼이 최소화되거나 화면 테두리를 넘은 것처럼 복원됩니다. 대신 이미지를 변경하거나 LoadCompleted가 트리거하도록 할 수있는 함수에 넣으십시오! - 내가 보여준 게시물에서 해결책을 시도 했니? – TaW

+0

이미지의 모든 픽셀에 대해'GetPixel() '을 호출하면, 무효화 할 때마다 솔루션으로 제안하는 것이 우스꽝 스럽습니다! '1x1' 사각형은 그것을 더욱 악화시킵니다. –

관련 문제