今天整理算法的时候发现在过去在c++中用UINT指针访问32位ARGB位图时,每次偏移量正好一个象素,所以直接使用“++”而不是“+= 4”。同理,当直接用座标访问时,应使用“i * stride / 4 + j” 而不是“i * stride + j”。但转移到c#代码时发现,如果同样使用uint指针访问位图,当stride等于width*4时可能不会有问题,一旦noffset不为0,将会出现问题。但次BUG没有证实每次都会发生。找时间要修正一下代码,在算法没有改进的情况下,还是建议使用byte类型指针做位图访问。

文章来源:http://spaces.msn.com/sharkoo/Blog/cns!D8E832CE4545AF!153.entry

补充:当锁定位图全部时,stride=width*4,当锁定的是位图的一部分时,stride将会不等于width*4。