绘制pictureBox c#

时间:2015-11-07 12:49:42

标签: c# picturebox graphicspath

我试图制作一个看起来像这样的自定义图片框 -

enter image description here

到目前为止,我所做的一切都是 - enter image description here

使用此代码 -

    protected void UpdateRegion()
    {
        var path = new GraphicsPath();
        Point[] points =
        {
            new Point( 0, 0),
            new Point(0, ClientSize.Height-80),
            new Point(80 , ClientSize.Height),
            new Point(ClientSize.Width-80, ClientSize.Height),
            new Point(ClientSize.Width,  ClientSize.Height-80),
            new Point(ClientSize.Width , 0)
        };
        path.AddPolygon(points);
        path.FillMode = FillMode.Winding;
        this.Region = new Region(path);
    }

1 个答案:

答案 0 :(得分:3)

你走了:

enter image description here

        GraphicsPath path = new GraphicsPath();
        path.FillMode = FillMode.Winding;

        int cut = 80;
        Rectangle cr = panel1.ClientRectangle;

        Point[] points =
        {
            new Point(0, cr.Height - cut),
            new Point(0, 0),
            new Point(cr.Width, 0),
            new Point(cr.Width, cr.Height - cut),
            new Point(cr.Width - cut, cr.Height),
            new Point(cut, cr.Height),
            new Point(0, cr.Height - cut),
        };
        path.AddPolygon(points);

        Rectangle arcRect = new Rectangle(0, cr.Height - 2 * cut, 2 * cut, 2 * cut);
        path.AddArc(arcRect, 90f, 90f);

弧由边界矩形定义,在我们的例子中,它的大小是切割的两倍。它从x轴开始顺时针旋转90°,并且(至少)增加90°。

您可以add it to a GraphicsPathdraw it with a Graphics反对。

以下是MSDN的引用:

  

如果图中有前面的线条或曲线,则会添加一条线   将前一段的端点连接到的开头   弧线。

     

弧沿着椭圆的边界被跟踪   指定的矩形。弧的起点由下式确定   从椭圆的x轴顺时针测量(在0度   角度)由起始角度的度数。端点是   类似地通过从起点顺时针测量来定位   扫掠角度的度数。如果扫掠角是   大于360度或小于-360度,电弧被扫过   精确地分别为360度或-360度。

Mote我已添加弧的边界矩形仅用于演示。代码不包括它。

对于其他角落的圆角切割,您需要更换和扩展点阵列并添加更多/其他弧。

其他角落弧取这些矩形:

 Rectangle arcRectTL = new Rectangle(0, 0, 2 * cut, 2 * cut);
 Rectangle arcRectTR = new Rectangle(cr.Width - 2 * cut, 0, 2 * cut, 2 * cut);
 Rectangle arcRectBR = new Rectangle(cr.Width - 2*cut, cr.Height - 2*cut, 2*cut, 2*cut);

起始角度分别为:180°, 270° and 0°

尺寸和扫描角度保持不变。