将原始位图点阵分割成8*8的小块,则该小块各类组合值刚好能够使用64位彻底表示,即横向8个点能够使用一个字节表示,纵向8行则即8字节。c++
对于32位的CPU彷佛直接使用64位的整型的话应该也是要拆分两次计算吧(我的猜想)。这里果断将原来的8*8点阵,拆分为两个4*8点阵(横向4点,纵向8点, 32位),分两次计算,将最后获得的值分别拼接到目标的8*8点阵中。git
逆时针旋转90°效果以下图算法
源码:https://git.oschina.net/ccyuan/RotateBitmap90.git windows
取位操做法花费时间与查表法花费的时间比值。测试
预计结果spa
|
位操做时间/查表时间操作系统 |
备注.net |
全白图code |
< 1blog |
空白字节不作操做,所以时间要比查表时间短 |
随机图 |
4~8 |
存在空白字节,所以时间<8 |
全黑图 |
8左右 |
每位都须要进行操做,所以时间最长 |
实际结果
全程数据读取
|
位操做时间/查表时间 |
备注 |
全白图 |
0.37~0.55 |
这时间比,不科学呀 |
随机图 |
5.6~8.2 |
符合预期 |
全黑图 |
3.3~3.6 |
彻底不科学呀 |
小点阵64*64之内
|
位操做时间/查表时间 |
备注 |
全白图 |
0.5~0.65 |
|
随机图 |
2.6~3.5 |
符合预期, |
全黑图 |
2.6~3.4 |
彻底不科学呀 |
整个流程数据统计
局部放大图
小点阵
参考资料