首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么WriteableBitmap变慢了?

为什么WriteableBitmap变慢了?
EN

Stack Overflow用户
提问于 2010-04-24 03:37:38
回答 2查看 4.1K关注 0票数 8

关于WriteableBitmap有一个简单的MSDN example

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

代码语言:javascript
运行
复制
 writeableBitmap.Lock();  
 (...set the writeableBitmap.BackBuffers pixel value...)
 writeableBitmap.AddDirtyRect(new Int32Rect(column, row, 1, 1));
 writeableBitmap.Unlock();

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

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

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

因此,由于在这两种情况下都只有一个像素被更新为"AddDirtyRect",因此反应速度应该独立于位图大小!?但是,当它的大小变得更大时,似乎可写位图变得更慢。

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

fritz

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-07-27 12:05:58

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

应该已经在.Net 4.0中修复了该问题

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

票数 4
EN

Stack Overflow用户

发布于 2010-08-09 03:55:52

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

这是一个主要的性能缺陷。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2701489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档