c# - WPF:如何防止 WriteableBitmap 撕裂?

标签 c# wpf .net-3.5 artifacts tearing

我正在使用 WriteableBitmap以每秒大约 20 帧的速度显示我自己处理的图像。

这个问题(WPF: More efficient way of displaying quickly-changing images?)
这个问题 ( How to display quick-updating images without large memory allocation? )
表明最好的方法是使用 WriteableBitmap

WriteableBitmap 的文档表明在 UI 线程上调用 WritePixels() 将导致渲染线程重绘图像:

MSDN 文档:
UI 线程将内容写入后台缓冲区。渲染线程从前端缓冲区读取内容并将其复制到显存。使用更改的矩形区域跟踪对后台缓冲区的更改。

当更新被发送到渲染线程时,渲染线程将更改后的矩形从后台缓冲区复制到前台缓冲区。渲染系统控制这种交换以避免死锁和重绘伪像,例如“撕裂”。

我在后台线程上处理图像,然后使用 Dispatcher.BeginInvoke() 调用 WritePixels(),以确保 WritePixels() 在 UI 线程上被调用。

我发现撕裂仍然发生在 WriteableBitmap 上,并且在我正在处理的应用程序中,它看起来很糟糕(它是一个医学成像应用程序)。有什么我可以做的吗?

最佳答案

为了避免撕裂,WriteableBitmap 做了很多工作,但在某些系统配置上这是不可避免的。这主要发生在关闭了 Aero (DWM) 的 Windows XP 或 Vista 上。

关于c# - WPF:如何防止 WriteableBitmap 撕裂?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1049446/

相关文章:

c# - C# 中两个几乎相同的 Web 引用的接口(interface)

c# - 将 onCallback 转换为异步

c# - Winform自定义控件如何通知另一个Winform自定义控件?

c# - 在 WPF 中,如何只允许在 DataGrid 中选择一个单元格?

c# - 声称类似于 Windows 任务栏的桌面空间的 WPF 应用程序

c# - 检查数值精度和小数位数的有效方法是什么?

c# - SQL Server 存储过程返回值,并在 C# 中使用

c# - 空字符串上的 ToString

c# - Xml 数据到 WPF TreeView 的双向绑定(bind)

c# - 线程池中大量线程处于等待状态,导致性能问题