原問題:
http://community.csdn.net/Expert/topic/3757/3757859.xml?temp=5.727786E-02
對于一個點旋轉一個角度alpha的話,乘以一個矩陣就可以了,但是對于一整幅圖檔來說,如果每個點都乘以矩陣,速度太慢了,有沒有快一點的算法,來旋轉整個圖檔?
基本知識
旋轉一個圖像,如果是從原圖上象素點到目标圖像的象素點進行計算的話不好,會導緻目标圖檔上出現空洞
是以一般的辦法是計算旋轉後的圖檔上的象素點,在原圖上的位置
由于旋轉并不能保證原圖和目标圖檔上的象素位置一一完全對應,是以一般的時候是需要進行內插補點進行光滑處理的,一個光滑處理必然是涉及到乘法運算,或者雙線性或者三次內插補點計算。
但是在對圖檔品質要求不高,對速度要求比較高的情況下,有辦法進行加速優化處理
解決方案
我們知道對于一個二維的位圖圖檔,如果要把它旋轉一個角度,基本算法就是:
x1,y1對應旋轉後點的公式:
x0= x1*cosa + y1*sina + num1;
y0= -x1*sina + y1*cosa + num2;
那麼一條水準線上的點 (x1+dx), y1 對應的點x0', y0'就是
x0' = x0 + dx*cosa
y0' = y0 - dx*sina
對于dx固定的時候, cosa,sina也都是定值了
這樣你在定位了水準線上的一點之後, 就可以順序獲得後面的增量了
同樣對于垂直線上的一點x1, y1+dy對應的點x0'', y0''也有類似的公式
x0'' = x0 + dy*sina
y0'' = y0 + dy*cosa
同樣dy和sina,cosa也是固定數值
有了上面這個公式,我們就可以快速的找到目标圖檔當中一條條水準或者垂直直線,在原圖當中的位置了,新位置隻通過簡單的加法己可以确定了,不再需要逐點乘法計算了。