我正在使用 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/