2017-06-21 100 views
0

我正在处理某个应用程序中的某些绘图时遇到了一些问题。每当我画出一条锐利的角落时,我的线条越过了它应该结束的点,线条越宽。图形中尖锐角处的无限角

enter image description here

我一直没能找到任何帮助。图纸是图形路径,主要是多边形和馅饼。我仔细检查了我的数学,这是正确的。我的代码如下。

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click 

    Dim g As Graphics = CreateGraphics() 
    g.SmoothingMode = SmoothingMode.AntiAlias 
    Dim pens As Pen = New Pen(Color.Black, 1) 
    Dim pen As Pen = New Pen(Color.Red, 1) 

    g.DrawLine(pens, 350, 0, 350, 800) 
    g.DrawPie(pen, 100, 0, 500, 500, 0, 90) 
    g.DrawPie(pen, 100, 300, 500, 500, 0, 10) 


    pen = New Pen(Color.Red, 2) 

    g.DrawLine(pens, 700, 0, 700, 800) 

    g.DrawPie(pen, 450, 0, 500, 500, 0, 90) 
    g.DrawPie(pen, 450, 300, 500, 500, 0, 10) 


End Sub 
+0

笔沿着路径的外部而不是内部绘制。要么通过重新定义你的路径来补偿它,要么忽略它。 –

+1

您还有多个GDI资源泄漏。当你完成它们时,你需要在'Graphics'和'Pen'对象上调用'Dispose()'。 –

+0

此外,如果窗体被最小化或者其他窗体在窗体前面通过,您在Button Click事件中执行的任何绘图都将丢失。 'CreateGraphics'应该几乎不会被使用。 –

回答

1

尝试使用笔的LineJoin属性,看看是否有帮助你。您还可以使用笔的Alignment,EndCapMitreLimit属性进行实验。

例如

pen.LineJoin = LineJoin.Bevel 

似乎剪掉那个角落:正如其他人评论的那样 enter image description here

,你需要调用DisposeGraphicsPen对象。对于Graphics对象,最好在表单的OnPaint重写中进行所有绘制。创建笔时使用Using声明,以便它自动处理。