路径 vs 几何绘图

8

我想知道什么更轻量级,因为我要绘制一个控件,它会绘制我的SegmentControl的280 * 4个部分,这是一个四分之一的圆,我只是想知道哪种方法可以以最少的内存绘制所述部分。

GeometryDrawing:

<Image>
    <Image.Source>
        <DrawingImage>
            <DrawingImage.Drawing>
                <GeometryDrawing Brush="LightBlue"
                                 Geometry="M24.612317,0.14044853 C24.612317,0.14044853 33.499971,-0.60608719 41,7.0179795 48.37642,14.516393 47.877537,23.404541 47.877537,23.404541 L24.60978,23.401991 z" />
            </DrawingImage.Drawing>
        </DrawingImage>
    </Image.Source>
</Image>

或路径:

<Path Fill="LightBlue"
              Stretch="Fill"
              Stroke="#FF0DA17D"
              Data="M24.612317,0.14044853 C24.612317,0.14044853 33.499971,-0.60608719 41,7.0179795 48.37642,14.516393 47.877537,23.404541 47.877537,23.404541 L24.60978,23.401991 z" />

如果您知道更好的方法,我们非常感激。

谢谢!


我在想像0.14044853(1E-8单位)这样的数字精度。在WPF中,每英寸有96个单位,100个单位(1E2)相当于26毫米,所以1E-1单位等于26微米(比一个像素还小),1E-3等于260纳米(太小了,即使用最强大的光学显微镜也看不到),1E-5等于2.6纳米(相当于指甲在3秒内生长的长度,你自己来判断),而1E-8等于2.6皮米,大约是一个电子的大小(远低于电子显微镜的分辨率)。这就好像我们用10个数字(0000002019)来表示一年(比如2019年),只为了确保不超过容量一样,真是有趣! - mins
1个回答

0
如果你想要更好的性能,可以研究一下"绘图可视化"。它更复杂,但也更高效。

https://learn.microsoft.com/en-us/dotnet/desktop/wpf/graphics-multimedia/using-drawingvisual-objects?view=netframeworkdesktop-4.8

然而,您需要了解如何绘制每个所需的形状。

示例:

 // Create a DrawingVisual that contains a rectangle.
private DrawingVisual CreateDrawingVisualRectangle()
{
    DrawingVisual drawingVisual = new DrawingVisual();

    // Retrieve the DrawingContext in order to create new drawing content.
    DrawingContext drawingContext = drawingVisual.RenderOpen();

    // Create a rectangle and draw it in the DrawingContext.
    Rect rect = new Rect(new System.Windows.Point(160, 100), new System.Windows.Size(320, 80));
    drawingContext.DrawRectangle(System.Windows.Media.Brushes.LightBlue, (System.Windows.Media.Pen)null, rect);

    // Persist the drawing content.
    drawingContext.Close();

    return drawingVisual;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接