【问题标题】:C# Drawing: What is the best way to draw a polygon with a hole in the middleC#绘图:绘制中间有孔的多边形的最佳方法是什么
【发布时间】:2011-09-13 03:43:53
【问题描述】:

我有一个由外边框和内边框定义的形状。如果没有内边框,则形状是实心的。如果有内部边界,我希望仅在两个边界之间定义多边形/路径;我不想画外面,然后用背景颜色画里面。

例如,如果我有一个由以下坐标定义的正方形作为外边框:

{0,0}, {20, 0}, {20,20}, {0, 20}

然后是 20x20 的正方形,其左下角位于原点。然后该形状从中心切出一个三角形:

{10,10}, {15,10}, {15,15}

如何使用 WPF 或 GDI+ 创建包含此形状的路径?

【问题讨论】:

    标签: c# wpf drawing gdi


    【解决方案1】:

    您可以使用 XAML 绘制该形状:(关键是使用 CombinedGeometryGeometryCombineMode="Exclude"

    <Path Fill="Black">
        <Path.Data>
            <CombinedGeometry GeometryCombineMode="Exclude">
                <CombinedGeometry.Geometry1>
                    <RectangleGeometry Rect="0,0,20,20"/>
                </CombinedGeometry.Geometry1>
                <CombinedGeometry.Geometry2>
                    <PathGeometry>
                        <PathFigure StartPoint="10,10">
                            <LineSegment Point="15,10"/>
                            <LineSegment Point="15,15"/>
                        </PathFigure>
                    </PathGeometry>
                </CombinedGeometry.Geometry2>
            </CombinedGeometry>
        </Path.Data>
    </Path>
    

    【讨论】:

    • +1 值得指出的是这里的关键是GeometryCombineMode="Exclude"
    【解决方案2】:

    在 GDI+ 中,您可以使用 FillPath()DrawPath()FillModeAlternate

    有一个非常接近您要求的示例here

    【讨论】:

      【解决方案3】:

      只需使用背景颜色在主轮廓顶部绘制孔即可。看起来好像它们是真正的洞 编辑 如果您使用的 api 不支持漏洞,请使用此方法。这就是为什么我假设你在问

      【讨论】:

      • 很少有 API 不支持漏洞,尽管我在过去使用 libharu 生成 PDF 文件时遇到过问题(仍然需要检查它是否已更改或开发补丁 - PDF 绝对支持复合路径)。当然,只有当您应该通过整个 看到的只是背景颜色时,才能在背景颜色上画一个洞。即使这样,也可能存在技术细节,例如用于边缘的样式。不过,对于简单案例的简单解决方案 +1。
      • 如果多边形也应该有一定的透明度,你的方法就行不通了。
      • 通常,如果您在多边形中有一个洞,您希望看到下面的图层或洞内的数据。如果您使用背景颜色绘制孔,您将擦除该区域中已绘制的所有内容。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-13
      • 1970-01-01
      相关资源
      最近更新 更多