1. 程式人生 > >bmp圖片內部任意區域畫素提取演算法

bmp圖片內部任意區域畫素提取演算法

bmp圖片裁剪大部分都是在水平方向上指定一個矩形區域,然後進行裁剪。有時候我們的需求是在一個bmp圖片ABCD內部,指定一個基準點p0(x0,y0)(裁剪區域的中心點),在水平方向上任意旋轉θ角度任意一塊長度為l,寬度為w的矩形區域A'B'C'D',這是就需要進行畫素提取,核心是座標系的轉換。



基本思路:


1.遍歷裁剪區域A'B'C'D'中的每一個畫素點p'(i,j)。


2.將A'B'C'D'區域中的每一個點通過座標轉換,轉換到原始bmp圖片上p''(u,v),並獲取對應點的畫素並儲存至buffer中。


3.將buffer中儲存的畫素資訊重新生成一張新的bmp圖片,裁剪完成。

座標轉換核心公式:

for(i=0;i<l;i++)
{
   for(j=0;j<w;j++)
   {
          u= x0 + (i-l/2)*sinθ - (j+w/2)*cosθ;
          v= y0 + (i-l/2)*cosθ - (j+w/2)*sinθ;
    }
}

//p'(i,j)表示需要提取畫素子區域座標系下任意一點。p''(u,v)表示將裁減區域內部座標系轉換到原始bmp影象上的座標。

//p0(x0,y0)表示指定的裁剪基準點座標,也就是裁剪矩形區域的中心點在原始bmp影象上的座標。

//l表示需要裁剪矩形畫素區域的寬度,w表示需要裁剪矩形區域的高度。

//θ表示需要裁剪矩形區域在水平方向上旋轉的角度。

如圖所示: