8

有一个关于 WriteableBitmap的简单MSDN 示例。

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

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

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

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

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

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

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

弗里茨

4

2 回答 2

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

于 2010-07-27T04:05:58.277 回答
4

在 .Net 4 中,无论您在何处添加脏矩形,可写位图仍然会使整个区域无效。您可以使用 Perforator 确认这一点,它是 Windows SDK v7.1 附带的 Windows 性能工具包的一部分。

这是一个主要的性能错误。

于 2010-08-08T19:55:52.487 回答