Wpf:为什么WriteableBitmap会变慢?

fri*_*itz 9 wpf writeablebitmap

有关WriteableBitmap 的简单MSDN示例.

它显示了如何通过在按下鼠标时更新一个像素并在WPF -Image Control上移动来用光标绘制手绘线.

 writeableBitmap.Lock();  
 (...set the writeableBitmap.BackBuffers pixel value...)
 writeableBitmap.AddDirtyRect(new Int32Rect(column, row, 1, 1));
 writeableBitmap.Unlock();
Run Code Online (Sandbox Code Playgroud)

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

如果图像/位图大小相对较小,例如800:600像素,那么最后绘制的像素总是与鼠标指针位置"同步",即没有延迟,对鼠标移动的反应非常快.

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

因此在两种情况下只有一个像素用" AddDirtyRect" 更新,反应速度应该独立于位图大小!?但似乎Writeablebitmap在它的大小变大时会变慢.

或者整个位图在每次writeableBitmap.Unlock();调用时都会以某种方式转移到图形设备,而不仅仅是方法中指定的矩形区域AddDirtyRect

弗里茨

Rod*_*son 4

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

它应该已在 .Net 4.0 中修复

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