【发布时间】:2023-03-12 09:35:01
【问题描述】:
我正在使用 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(),以确保在UI 线程上调用WritePixels()。
我发现WriteableBitmap 仍然会出现撕裂现象,并且在我正在开发的应用程序中,它看起来很糟糕(它是一个医学成像应用程序)。有什么我可以做的吗?
【问题讨论】:
-
这么多年过去了……你解决了这个问题吗?
-
@qakmak,很难回忆起这么久,但我相信转向更现代的操作系统是答案。查看接受的答案。
-
这个答案对我来说不够好。但还是谢谢你
-
不幸的是,不确定您是否会得到比这更好的答案。所有迹象都表明这是一个操作系统级别的问题。
标签: c# wpf .net-3.5 artifacts tearing