Wpf:为什么WriteableBitmap变慢?

有关于WriteableBitmap的简单MSDN示例。

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

 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();的图形设备上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


在.Net 4中,无论您在哪里添加脏矩形,可写位图都会使整个区域无效。 您可以使用Perforator进行确认,Perforator是Windows SDK v7.1附带的Windows性能工具包的一部分。

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

链接地址: http://www.djcxy.com/p/26871.html

上一篇: Wpf: Why is WriteableBitmap getting slower?

下一篇: Overlay WriteableBitmap with color