【问题标题】:Vector drawing overlay C#矢量绘图覆盖 C#
【发布时间】:2021-07-28 10:59:59
【问题描述】:

我想在位于图片前面的叠加层上绘制矢量线和文本。目前我正在通过drawing.graphic在透明的去比例位图上绘画,但是由于我在Mouse_move上刷新它,所以它的资源很重。现在我想通过一些 svg 查看器直接显示我的向量。有谁知道一个好的包可以使用吗?它只需要高性能,可以集成到我的 xaml 中,使用透明背景并绘制文本和线条。 我发现的 NuGet 包要么记录不充分,要么不起作用。 (VectSharp,SVG)

【问题讨论】:

    标签: c# svg vector


    【解决方案1】:

    据我所知,没有任何内置的东西可以很好地与 SVG 搭配使用。假设您没有接受 SVG 的想法,可能还有其他方法可以做到这一点:

    1. 使用 Windows 窗体并在绘图事件中进行手动绘图。如果您要绘制大量图形,这可能会很慢。
    2. 绘制位图并将其绘制到屏幕上(就像您目前所做的那样)。假设您没有在每次鼠标移动中更改所有内容,则可以将位图在前景和背景位图中分开,并且仅在鼠标移动时重绘前景。
    3. 将 svg 图形转换为 xaml。像inkscape 这样的程序可以做到这一点,但它可能需要一些手动调整才能获得正确的封闭元素等。
    4. 将矢量图形对象转换为相应的 WPF 图形对象,并将其绑定到 xaml 代码中的某个合适的容器对象。
    5. 使用 SharpDX 之类的工具来获得对图形硬件的较低级别的访问权限。

    您提到了性能问题,但此类事情的性能是确保您不会不必要地重做工作,并确保尽可能高效地将图形基元发送到硬件。例如,绘制单个 GraphicsPath 可能比单独绘制每条线更有效。

    如果您可以指定您尝试绘制的矢量数量,这也会很有帮助。如果我们谈论的是数百万行,除非您有一个经过良好优化的渲染管道,否则它可能会有点慢。

    【讨论】:

    • 我正在创建一个带有内置编辑器的截图工具。所以我需要一个绘画工具。为了归档我在鼠标按下时记录每个点,如果屏幕截图/覆盖图变大,它会吸引大量资源。同时,我找到了一种使其性能更高的方法。我正在修补一个可写的位图,它只是刷新编辑的部分并且运行得更好。我只需要转换很多变量,希望背景保持透明。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-14
    • 1970-01-01
    • 1970-01-01
    • 2016-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多