为什么在 WPF 自定义 2D 绘图中使用具有破折号图案的笔会导致巨大(!)性能下降?

2023-12-10

希望有人能阐明这一点,以便我可以使用带有破折号图案的笔?

我正在写一个可滚动的图表(Panel inside ScrollViewer实现IScrollInfo) 在 WPF 中使用DrawingVisual's DataContext.DrawX。我有几千DrawingVisual通过使用滚动的 sTranslateTransform on the Panel接待他们的地方。我通过放置一个网格来实现Panel在它的顶部并使用从一个边缘到另一边缘绘制简单的水平线DataContext.DrawLine(pen, new Point(0, y), new Point(widthOfPanel, y));//(注意:这些线始终是静态的,它们从不移动)。

滚动性能绝对是疯狂的(即 DrawingVisual 是立即绘制的并且滚动是即时的)。但如果我使用Pen使用破折号图案(例如见下文)来绘制网格线,然后滚动非常不稳定,并且性能似乎下降了 100 倍(估计值)。谁能解释为什么会发生这种情况以及我如何解决这个问题?

带破折号图案的笔示例:

<Pen x:Key="PenUsingDashPatterns" Brush="Black" Thickness="1">
   <Pen.DashStyle >
      <DashStyle Dashes="3, 3" />
   </Pen.DashStyle>
</Pen>

这是一个可能的解决方法 - 如果您只绘制水平和/或垂直线,您可以尝试创建您的Pen带有格子图案DrawingBrush例如:

  <Pen x:Key="PenUsingDashPatterns" Thickness="1">
        <Pen.Brush>
            <DrawingBrush TileMode="Tile" 
                          Viewport="0 0 6 6" ViewportUnits="Absolute">
                <DrawingBrush.Drawing>
                    <GeometryDrawing Brush="Black">
                        <GeometryDrawing.Geometry>
                            <GeometryGroup>
                                <RectangleGeometry  Rect="0 0 3 3"/>
                                <RectangleGeometry  Rect="3 3 3 3"/>
                            </GeometryGroup>
                        </GeometryDrawing.Geometry>
                    </GeometryDrawing>
                </DrawingBrush.Drawing>
            </DrawingBrush>
        </Pen.Brush>
    </Pen>   

或者,您可以对垂直线和水平线使用不同的画笔,或者可能使用ImageBrush为了更好的性能。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么在 WPF 自定义 2D 绘图中使用具有破折号图案的笔会导致巨大(!)性能下降? 的相关文章

  • 无法在 CUDA 中找到 1 到 100 数字的简单和?

    我正在研究使用 CUDA 的图像处理算法 在我的算法中 我想使用 CUDA 内核找到图像所有像素的总和 所以我在cuda中制作了内核方法 来测量16位灰度图像的所有像素的总和 但我得到了错误的答案 所以我在cuda中编写了一个简单的程序来查
  • 来自 double 的 static_cast 可以优化分配给 double 吗?

    我偶然发现了一个我认为不必要的功能 并且通常让我感到害怕 float coerceToFloat double x volatile float y static cast
  • 如何使用Entity Framework Code First CTP 5存储图像?

    我只是想弄清楚是否有一种简单的方法可以使用 EF Code First CTP 5 存储和检索二进制 文件 数据 我真的很希望它使用 FILESTREAM 类型 但我真的只是在寻找某种方法让它工作 我总是创建另一个类 例如ProductIm
  • 在两个屏幕上拉伸 WPF 窗口

    我是 WPF 的初学者 我希望我的应用程序能够跨越两个具有相同分辨率的屏幕 我需要一个示例代码应用程序 因为我不知道从哪里开始 谢谢 The Screen课程将为您提供有关所有屏幕的信息 在之前没有实际做过的情况下 我会尝试以下操作 int
  • 获取列表框中视图中的项目

    我有一个 ListBox 其属性 VirtualizingStackPanel VirtualizationMode 设置为 回收 我正在绑定一个自定义集合 实现IList and IList
  • 如何在 Linux 上重新实现(或包装)系统调用函数?

    假设我想完全接管 open 系统调用 也许要包装实际的系统调用并执行一些日志记录 一种方法是使用 LD PRELOAD http scaryreasoner wordpress com 2007 11 17 using ld preload
  • 在 C# 中解析 JS Date.toIsoString

    我需要将 JS 日期存储为 ISO 8601 日期 我目前正在从格式为 2019 06 22T00 00 00 000Z 的表单中获取日期 正如 JS 的 toIsoString 方法所期望的那样 当这个日期传递到我的 API 控制器时 我
  • 加载 QPixmap 数据的更好方法

    更好的方法来做到这一点 没有QImage QImage image width height QImage Format RGB888 memcpy image bits m frameRGB gt data 0 height width
  • 注入包含接口的所有已注册实现的 Enumerable

    给出以下接口 public interface IMyProcessor void Process 我希望能够注册多个实现 并让我的 DI 容器将它们的可枚举注入到这样的类中 public class MyProcessorLibrary
  • 如何在 C 中链接目标文件?失败并显示“架构 x86_64 的未定义符号”

    因此 我尝试在我的文件 file2 c 中使用另一个 C file1 c 文件中定义的函数 为了做到这一点 我包含了 file1 file1 h 的标头 但是 每当我尝试使用 gcc 编译文件时 我都会收到以下错误 Undefined sy
  • X 轴和 Z 轴上的 Quaternion.Slerp,无 Y 轴

    I am trying to rotate the Player about X Y and Z axis The Y axis should not move from last angle Example if I rotate 45
  • 将 AutomationID 与 ListView 结合使用

    我正在尝试将 AutomationId 附加到列表视图中的项目 理想情况下 将项目名称绑定到显示的项目
  • 运行实体框架自定义工具,它有什么作用?

    在 Visual Studio 中 当使用实体框架并为 tt 和 Context tt 文件应用运行自定义工具时 它是什么以及它有什么作用 为什么它解决数据库同步问题 有时 为什么我应该在运行 tt 之前运行它 Context tt 它被称
  • 如何在VS2005中使用从.bat而不是.exe启动的外部程序进行调试?

    在我的 c 项目的调试属性中 我选择了 启动外部程序 并选择了我希望将调试器附加到的程序的 exe 但是 现在我需要从 bat 文件而不是 exe 启动程序 但 VS2005 似乎不允许这样做 这可能吗 编辑 为了澄清 我需要调试从 bat
  • 在 clang 中向量化函数

    我正在尝试根据此用 clang 对以下函数进行矢量化铿锵参考 http llvm org docs Vectorizers html 它采用字节数组向量并根据以下条件应用掩码this RFC https www rfc editor org
  • 跟踪白色背景中的白球(Python/OpenCV)

    我在 Python 3 中使用 OpenCV 来检测白场上的白 黑球 并给出它的精确 x y 半径 和颜色 我使用函数 cv2 Canny 和 cv2 findContours 来找到它 但问题是 cv2 Canny 并不总是检测到圆的完整
  • java有类似C#的属性吗? [复制]

    这个问题在这里已经有答案了 C 属性 我的意思是 get 和 set 方法 是一个非常有用的功能 java 也有类似 C 的属性吗 我的意思是我们如何在 java 中实现类似以下 C 代码的内容 public string Name get
  • 稀疏矩阵超定线性方程组c/c++库

    我需要一个库来解决 Ax b 系统 其中 A 是一个非对称稀疏矩阵 每行有 8 个条目 而且可能很大 我认为实现双共轭梯度的库应该没问题 但我找不到一个有效的库 我尝试过 iml 但 iml sparselib 包中缺少一些标头 有小费吗
  • 如何将模型绑定到动态创建的类 nancyfx

    首先感谢任何愿意查看我的问题的人 我对 Nancyfx 还很陌生 在尝试将 JSON 有效负载绑定到动态创建的类时遇到问题 我按照这篇文章中的代码动态创建了该类 在C 中动态创建一个类 https stackoverflow com que
  • 使用空的weak_ptr作为参数调用map::count安全吗?

    打电话安全吗map count http www cplusplus com reference map map count on an 未初始化因此为空weak ptr http en cppreference com w cpp mem

随机推荐

  • fopen 返回资源 ID #4

    为什么有回声Resource id 4而不是页面本身 Because fopen 返回指向文件的资源指针 而不是文件的内容 它只是打开它以供后续读取和 或写入 具体取决于您打开文件的模式 你需要fread handle 中引用的资源中的数据
  • 从 ItemsControl 获取单击的对象并使用其属性填充 Popup

    我有一个ItemsControl它显示我的视图模型列表中的对象 我也有代码来显示Popup当用户单击 ItemsControl 中的项目时 但是我不知道如何从单击的项目中获取实际对象以读取其属性并将其显示在Popup 我有一个Click的事
  • Tibco Spotfire 中的动画数据变化

    这是我在这里发表的第一篇文章 所以如果我在此过程中在礼仪方面失败 请原谅我 我正在开发一个 POC 用于处理 Tibco Spotfire 7 0 中的可视化动画 这将允许用户通过迭代一组过滤器或基于一组预先确定的数据迭代更改数据来查看数据
  • 模加法器输出显示没有变化

    输出波形显示无变化sum dif burrow and out 即使增加延迟时间后 输出仍然没有变化 这应该像 mod 加法器一样工作 如加 10 和 2 并且 mod 3 给出输出零 CODE module Mod adder a b p
  • 缓冲流 - ASP.NET Core 3.0 中不允许同步操作

    我有一个针对 AspNetCore 2 2 的 REST API 其端点允许下载一些大的 json 文件 迁移到 AspNetCore 3 1 后 此代码停止工作 try HttpContext Response StatusCode in
  • 以“X 分钟/小时/天/周/月/年前”格式解析日期时间

    如何解析 X 分钟 小时 天 周 月 年前格式的日期 以下是一些示例来说明我所指的内容 3天前 1 分钟前 2年前 我认为使用默认的 Java 库很难做到这一点 我对吗 基于的一个小片段Calendar API Pattern p Patt
  • vue.js中的onclick多个元素

    我正在创建一个功能来隐藏和显示图像缩略图的描述 如果用户单击图像缩略图 描述将显示为动画 我已经遵循了 VueJS 中关于转换的教程 但不幸的是只有一个缩略图有效 其余的无效 我已经在我的过程中删除了脚本try and errors 那么
  • MySQL MIN/MAX 返回正确的值,但不返回相关的记录信息

    我真的很困惑 我显然不理解最小 最大概念 我正在尝试从 work type 和 work id 分组中获取最新行 如果我从 MIN 更改为 MAX 它会更改返回的时间戳 但它永远不会带来该记录中的状态信息 Example SELECT CO
  • iTask - 将参数值传递给匿名过程

    我需要创建一定数量的 iTask 来执行动态数组和记录中其他字段的操作 每个 iTask 都在该数组的特定部分中运行 该数组是记录中的一个字段 它作为 var 参数传递给 iTask 数组字段中的操作进展顺利 但其他记录字段在所有任务完成工
  • 在代码中保存具有特定名称的 jupyter 笔记本

    我有一个 Jupyter 笔记本 它或多或少是一个完成事情的 模板 例如 笔记本是每个国家经济数据的模板 所有的绘图和分析都是标准化的 我正在寻找一种以编码方式完成保存的方法 而不是自己手动命名 无论如何 如果我有一个变量标记为 my as
  • 当鼠标悬停在其中一个元素上时,突出显示具有相同类的所有元素

    在 JavaScript 中 当鼠标悬停在其中一个项目上时 是否可以突出显示具有相同类的所有项目 例如 如果我在课堂上有两个段落p1和全班的 2 段p2 我想要两个元素p1在鼠标悬停时突出显示 并且我还希望 p2 的两个元素在鼠标悬停时突出
  • 如何获取 Instagram 个人资料图片

    在我的应用程序中 想要将 Instagram 个人资料图片放入他的帐户中 如何以编程方式从 Instagram 获取用户的个人资料图片 例如 使用 Instagram API 用户端点 https api instagram com v1
  • 找不到类型或命名空间名称[重复]

    这个问题在这里已经有答案了 我有一个C 包含多个项目的解决方案Visual Studio 2010 一个是测试项目 我称之为 PrjTest 另一个是Windows Forms Application项目 我称之为 PrjForm 还有Pr
  • 如何设置sbt的堆大小?

    我正在使用 SBT 0 12 0 我已经阅读了有关堆栈溢出的其他答案并遵循了它们 但是它们都没有帮助 例如 create ForkRun类 我在使用 sbt 期间没有观察到任何分叉进程 设置环境变量JAVA OPTS 它已设置 但 sbt
  • 匹配所有语言php字母的正则表达式

    我花了几个小时试图在 php 中找到正确的正则表达式来匹配任何语言字母 但防止它留出空间 我试过这个 p L 这没关系 但看起来它允许空间 然后我尝试了这个 w 看起来仍然有空间 有人可以帮忙吗 您需要指定 Unicode 修饰符u to
  • 在 Swift 中使用 AlamoFire 创建通用方法

    我使用 AlamoFire 进行 API 调用 并且在我的项目中都有这样的内容 static func login userName String password String gt User let parameters userNam
  • 如何在android中的警报对话框中添加阴影效果

    我想在警报对话框中添加阴影效果 我想要在我的对话框中出现这种类型的阴影效果在这里我发布了3个文件 第一个是style xml 第二个是theme java 第三个文件是demo bg xml文件 我已经尝试过这样的操作 Style xml
  • 从外部触发淘汰赛事件

    我有以下 html 表单中的 Select Element
  • 获取当前键盘光标位置

    无论如何 是否可以像获取鼠标光标位置一样全局获取键盘光标 插入符号 当前位置的坐标mouseLocation 不 没有办法在全球范围内做到这一点 如果您想在自己的应用程序中执行此操作 例如在 NSTextView 中 您可以这样做 NSRa
  • 为什么在 WPF 自定义 2D 绘图中使用具有破折号图案的笔会导致巨大(!)性能下降?

    希望有人能阐明这一点 以便我可以使用带有破折号图案的笔 我正在写一个可滚动的图表 Panel inside ScrollViewer实现IScrollInfo 在 WPF 中使用DrawingVisual s DataContext Dra