將原始位圖點陣分割成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 |
徹底不科學呀 |
整個流程數據統計
局部放大圖
小點陣
參考資料