【发布时间】:2011-05-06 19:30:16
【问题描述】:
我有一个关于 Bitmap 类的问题。如果要在位图上设置很多像素,那么可以使用SetPixel的方法,但是速度很慢。有很多关于如何使用LockBits 方法等来加速它的文档,所以我创建了一个方法:SetFastPixel来加快速度。
但是,我真的对此感到困惑:为什么微软不将 SetPixel() 的实现更改为更快的实现? 换句话说,使用 @ 是否有优势? 987654325@ 代替LockBits 方法?
【问题讨论】:
-
您如何确定您的实施速度更快? MS 实现几乎是直接调用GDI+ Flat API
-
我很确定。我使用 StopWatch 类来测量两个执行时间。在我的情况下,
lockbits方法快 5 倍(重绘整个位图 (265*265)。 -
您能否链接这些“有关如何使用 LockBits 方法加快速度的大量文档”?
-
@Timo 我在任何这些链接中都看不到 SetFastPixel 函数。那些锁定整个位图并立即更改它。您如何实现比 SetPixel 更快地锁定/更改/解锁的 SetFastPixel?
-
@Timo,我认为人们发现很难想象“SetFastPixel”会更快,因为 lockbits 旨在允许以像素数组的形式访问图像。加速是一次写入多个像素的能力。如果您使用相同的参数实现了“SetFastPixel”,则您的循环正在执行“锁定->写入 1 个像素->解锁->重复”,这基本上是 setpixel 无论如何都会执行的操作,因此您不会从使用 lockbits 中受益以任何方式