Vb.net 排除图形路径中的区域

Vb.net 排除图形路径中的区域,vb.net,gdi,Vb.net,Gdi,我正在使用GDI,并试图从顶视图绘制一个对象。我想画一个有脚的圆形脚凳,但当你从上面看时,只能看到主圆圈外的脚 我看到了很多外切的例子,但我想把圆内的每一个东西都剪下来,然后画出圆的轮廓 下面是示例代码,演示我要做的事情。可能很简单,我试过包括region.exclude,但没有任何效果 Dim bmp As New Bitmap(500, 500) Dim g As Graphics = Graphics.FromImage(bmp) g.Clear(Color.Tra

我正在使用GDI,并试图从顶视图绘制一个对象。我想画一个有脚的圆形脚凳,但当你从上面看时,只能看到主圆圈外的脚

我看到了很多外切的例子,但我想把圆内的每一个东西都剪下来,然后画出圆的轮廓

下面是示例代码,演示我要做的事情。可能很简单,我试过包括region.exclude,但没有任何效果

    Dim bmp As New Bitmap(500, 500)
    Dim g As Graphics = Graphics.FromImage(bmp)
    g.Clear(Color.Transparent)
    g.SmoothingMode = SmoothingMode.HighQuality
    g.PixelOffsetMode = PixelOffsetMode.Default

   ' Add 4 Feet
    Dim npoints As Point() = {New Point(50, 5), New Point(95, 50), New Point(50, 95), New Point(5, 50), _
                        New Point(5, 5), New Point(90, 90), New Point(0, 0), New Point(100, 100)}
    Dim gp As New GraphicsPath

    Dim p As Pen = New Pen(Color.DarkGray, 1)
    Dim FeetSize As Size = New Size(10, 10)
    For I As Integer = 0 To 3
        gp.AddEllipse(New Rectangle(New Point(NPoints(I).X - (FeetSize.Width / 2), NPoints(I).Y - (FeetSize.Height / 2)), FeetSize))
    Next
    g.DrawPath(p, gp)

    ' I want to do clipping now; ie everything inside circle region below

    ' Then draw the main footstool circle
    gp.Reset()
    gp.AddEllipse(NPoints(4).X, NPoints(4).Y, NPoints(5).X, NPoints(5).Y)
    g.DrawPath(p, gp)

    ' Set Picturebox Value
    PictureBox1.Image = bmp
[更新]我找到了使用graphics.excludeclip的解决方案:

       ' Add Feet
    Dim p As Pen = New Pen(Color.DarkGray, 1)
    Dim FeetSize As Size = New Size(10, 10)
    For I As Integer = 0 To 3
        gp.AddEllipse(New Rectangle(New Point(NPoints(I).X - (FeetSize.Width / 2), NPoints(I).Y - (FeetSize.Height / 2)), FeetSize))
    Next
    ' Clip Exclude Circle
    Dim egp As New GraphicsPath
    egp.AddEllipse(NPoints(4).X, NPoints(4).Y, NPoints(5).X, NPoints(5).Y)
    g.ExcludeClip(New Region(egp))

    ' Draw Result
    g.DrawPath(p, gp)

    ' Draw Circle
    g.ResetClip()
    gp.Reset()
    gp.AddEllipse(NPoints(4).X, NPoints(4).Y, NPoints(5).X, NPoints(5).Y)
    g.FillPath(New SolidBrush(FillColour), gp)
    g.DrawPath(p, gp)

当我画这个的时候,我可以看到脚部的圆圈被上面的圆圈划破,所以我可以看到5个完整的圆圈,是不是不对?你能用你得到的图片和你想要的图片更新你的帖子吗?实际上Stackoverflow不允许我发布图片,因为我的评分现在太低了。这似乎是第二十二条军规。请务必处理
图形选项卡和
笔-使用块非常有效。