2015-10-05 63 views
1

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

我不知道我应该如何转换这种类型的... 我应该寻找角点,并将其转换或根本已经是一个转换方法存在[我还不找]


如果有人需要一个 System.Windows.Media.Geometry为例,XAML代码看起来如下:

<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/> 

回答

1

好了 - 我发现我自己的解决方案:

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´ 
}