有誰知道一個有效的方式獲取像素中的WPF幾何長度?我知道WPF中的幾何圖形是基於矢量的,因此實際上沒有像素長度。但必須能夠根據可見的繪製圖像來獲取長度。我的意思是,如果我在1024x800像素的圖像中繪製幾何圖形,必須能夠獲得這些圖像的長度。獲取幾何長度
我錯了,還是有任何可能的和有效的方式來獲取這些信息?
預先感謝您!
邁克爾
有誰知道一個有效的方式獲取像素中的WPF幾何長度?我知道WPF中的幾何圖形是基於矢量的,因此實際上沒有像素長度。但必須能夠根據可見的繪製圖像來獲取長度。我的意思是,如果我在1024x800像素的圖像中繪製幾何圖形,必須能夠獲得這些圖像的長度。獲取幾何長度
我錯了,還是有任何可能的和有效的方式來獲取這些信息?
預先感謝您!
邁克爾
我想出了一個解決方案,但不知道這是否是最有效率(最快)的方式。請留下您的評論 - 謝謝大家!
public static double GetLength(this Geometry geo)
{
PathGeometry path = geo.GetFlattenedPathGeometry();
double length = 0.0;
foreach (PathFigure pf in path.Figures)
{
Point start = pf.StartPoint;
foreach (PolyLineSegment seg in pf.Segments)
{
foreach (Point point in seg.Points)
{
length += Distance(start, point);
start = point;
}
}
}
return length;
}
private static double Distance(Point p1, Point p2)
{
return Math.Sqrt(Math.Pow(p1.X - p2.X,2) + Math.Pow(p1.Y - p2.Y,2));
}
var geometry = new EllipseGeometry(new Point(50,50), 45, 20);
var length = geometry.Bounds.Width; //or geometry.Bounds.Height
注:EllipseGeometry
僅僅是一個例子。所有從Geometry
派生的類都有Bounds
屬性。
感謝DanM爲您的答案!無論如何,你給的例子並沒有真正給出像素的「行」長度,而是邊界框的大小。一個更清晰的例子將是一個100x100像素大小的邊界框,其中將在內部繪製鋸齒形多段線。然後,線長度(幾何長度)將定義爲比邊界框大得多。 – Michael
如何繪製幾何圖形?也許這是可能的一點點代數... – webber2k6