转换系统.Windows.媒体.几何 --> 系统.绘图.区域



我有一个非托管API,它使用System.Drawing.Region作为参数。
问题是,我有一个System.Windows.Media.Geometry,我需要把它转换成Region -类。

我想知道我应该如何转换这个类型…我应该寻找角点并转换它们吗?还是已经存在一个转换方法[我还没有找到]?


如果需要System.Windows.Media.Geometry的示例,则xml代码如下所示:

<GeometryGroup>
    <RectangleGeometry Rect="32,0,440,89"/>
    <RectangleGeometry Rect="0,89,472,41"/>
    <RectangleGeometry Rect="472,93,66,193"/>
    <RectangleGeometry Rect="53,130,419,156"/>
    <RectangleGeometry Rect="53,184,38,102"/>
    <RectangleGeometry Rect="91,200,52,86"/>
    <RectangleGeometry Rect="143,216,75,70"/>
    <RectangleGeometry Rect="218,232,52,54"/>
    <RectangleGeometry Rect="270,248,75,38"/>
    <RectangleGeometry Rect="345,264,52,22"/>
    <RectangleGeometry Rect="516,270,22,16"/>
<GeometryGroup/>

Ok -我自己找到了解决方案:

Geometry geo = .... ;
IEnumerable<PolyLineSegment> segments =
    from PathFigure figure in geo.GetOutlinedPathGeometry().Figures
    from PathSegment segment in figure.Segments
    select s as PolyLineSegment;
using (GraphicsPath path = new GraphicsPath())
{
    path.StartFigure();
    foreach (PolyLineSegment plseg in segments)
    {
        PointF[] points = (from point in plseg.Points
                           select new Point((float)point.X, (float)point.Y)).ToArray();
        path.AddPolygon(points);
    }
    path.CloseFigure();
    // DO SOMETHING WITH `path´
}

最新更新