Преобразование System.Windows.Media.Geometry -> System.Drawing.Region
У меня есть неуправляемый API, который использует System.Drawing.Region
в качестве аргумента.
Проблема в том, что у меня есть System.Windows.Media.Geometry
, который мне нужно преобразовать в 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´
}