天天看點

圖像程式設計學習筆記7——圖像縮放

假設放大因子為ratio,(為了避免新圖過大或過小,我們在程式中限制0.25≤ratio≤4),縮放(zoom)的變換矩陣很簡單:

圖像程式設計學習筆記7——圖像縮放

(2.13)

縮放變換的源代碼如下,因為和轉置的那段程式很類似,程式中的注釋就簡單一些。

/** 

* 函數名: zoom 

* 參  數: ratio -- 縮放率 

* 功  能: 對圖檔進行水準和垂直鏡像操作 

*         隻儲存原圖大小的圖像資料,如果沒有就用白色填充 

*/  

void zoom(double ratio)  

{  

    int height = bmpInfoHeader.biHeight;     

    int width = bmpInfoHeader.biWidth;    

    int imgSize = bmpInfoHeader.biSizeImage;  

    int lineByte = (width * 8 +31) / 32 * 4;  //每行像素所占位元組數  

    pNewBmpData = new unsigned char[imgSize];   

    memset(pNewBmpData,(BYTE)255,sizeof(unsigned char )*imgSize);   //先全部用白色填充,處理的時候沒有資料的自然就是白色了  

    int x0,y0;  

    for(int i = 0; i < height; i++ )  

    {  

        for(int j = 0; j < width; j++ )  

        {  

            x0 = j / ratio;  

            y0 = i / ratio;  

            if( (x0>=0) && (x0<width) && (y0>=0) && (y0<height))  

            {  

                *(pNewBmpData + (height - 1 - i)*lineByte + j) = *(pBmpData + (height - 1 - y0)*lineByte + x0);   

            }  

        }  

    }  

}  

繼續閱讀