Wpf:为什么 WriteableBitmap 变慢了?

标签 wpf writeablebitmap

有一个简单的MSDN example关于可写位图。

它展示了如何通过在按下鼠标并在 WPF 图像控件上移动时仅更新一个像素来使用光标绘制手绘线。

 writeableBitmap.Lock();  
 (...set the writeableBitmap.BackBuffers pixel value...)
 writeableBitmap.AddDirtyRect(new Int32Rect(column, row, 1, 1));
 writeableBitmap.Unlock();

现在我试图理解快速移动鼠标指针时的以下行为:

如果图像/位图大小相对较小,例如800:600 像素,则最后绘制的像素始终与鼠标指针位置“同步”,即没有延迟,对鼠标移动的 react 非常快。

但是如果位图变大,例如1300:1050 像素,您可以注意到延迟,最后绘制的像素总是在移动鼠标指针后面出现一点延迟。

所以在这两种情况下,只有一个像素被“AddDirtyRect”更新, react 速度应该与位图大小无关!?但是当 Writeablebitmap 的大小变大时,它似乎变慢了。

或者整个位图是否以某种方式传输到每个 writeableBitmap.Unlock(); 上的图形设备调用 ,而不仅仅是 AddDirtyRect 中指定的矩形区域方法?

弗里茨

最佳答案

.Net 3.5 中 WPF 的 WriteableBitmap 中存在一个错误,导致对 AddDirtyRect 的任何调用都会使整个图像无效,而不仅仅是矩形区域。

它应该已在 .Net 4.0 中修复

http://social.msdn.microsoft.com/Forums/en-US/wpfprerelease/thread/1b84e451-9698-431f-9c51-078825a729b5

关于Wpf:为什么 WriteableBitmap 变慢了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2701489/

相关文章:

更改焦点和滚动时,带有 IsVirtualizing ="true"的 WPF TreeView 会跳来跳去

WPF 绑定(bind) : Casting in binding path

python - 将 IronPython WPF 项目编译为 exe

c# - WPF/WinForms/GDI 互操作 : converting a WriteableBitmap to a System. Drawing.Image?

c# - WriteableBitmap访问冲突问题

wpf - 使用 WPF WriteableBitmap.BackBuffer 绘制线条

c# - 将图像文件打开到 WriteableBitmap

wpf - 在 WPF 中,如何将命令转发给子控件?

c# - ComboBox:根据属性状态设置样式内容

c# - WriteableBitmap 内存泄漏?