2015-10-05 62 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´ 
}