圖像編程學習筆記6――圖像轉置
睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接
轉置(transpose)是指將x,y坐標對換,圖2.2的轉置如圖2.15所示。
圖2.2
圖2.15 圖2.2的轉置
要注意的是,轉置和旋轉900是有區別的,不信你可以試試:怎么旋轉,圖2.2也轉不出圖2.15來。另外,轉置后圖的寬高對換了。轉置的變換矩陣很簡單:
(2.12)
鏡象變換的源代碼如下,因為和旋轉的那段程序很類似,程序中的注釋就簡單一些:
由于很多代碼和之前的重復,所以只給出主要功能代碼(win32 控制臺程序)
[cpp] view plaincopy
- void transpose()
- {
- int height = bmpInfoHeader.biHeight;
- int width = bmpInfoHeader.biWidth;
- int imgSize = bmpInfoHeader.biSizeImage;
- //轉置之后高寬變了
- bmpInfoHeader.biHeight = width;
- bmpInfoHeader.biWidth = height;
- memset(pNewBmpData,0,sizeof(unsigned char )*imgSize);
- int lineByte = (width * 8 + 31) / 32 * 4; //每行像素的字節數
- int newLineByte = (height * 8 + 31) / 32 * 4; //新的lineByte
- for(int i = 0; i < height; i++ )
- {
- for(int j = 0; j < width; j++ )
- {
- *(pNewBmpData + (width - 1 - j)*newLineByte + i) = *(pBmpData + (height - 1 - i)*lineByte + j); //轉置
- }
- }
- }