


下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、圖像旋轉(zhuǎn)算法VC實現(xiàn) 原創(chuàng) 2007-04-02 17:56:47 字號:大 中 小 /* * * 函數(shù)名稱: * RotateDIB( * * 參數(shù): * LPSTR lpDIB - 指向源DIB的指針 * int iRotateAngle - 旋轉(zhuǎn)的角度(0-360度) * * 返回值: * HGLOBAL - 旋轉(zhuǎn)成功返回新DIB句柄,否則返回NULL。 * * 說明: * 該函數(shù)用來以圖像中心為中心旋轉(zhuǎn)DIB圖像,返回新生成DIB的句柄。 * 調(diào)用該函數(shù)會自動擴大圖像以顯示所有的象素。函數(shù)中采用最鄰近插 * 值算法進行插值。 * */ HGLOBAL WINAPI RotateDIB(
2、LPSTR lpDIB, int iRotateAngle / 源圖像的寬度和高度 LONG lWidth; LONG lHeight; / 旋轉(zhuǎn)后圖像的寬度和高度 LONG lNewWidth; LONG lNewHeight; / 圖像每行的字節(jié)數(shù) LONG lLineBytes; / 旋轉(zhuǎn)后圖像的寬度(lNewWidth,必須是4的倍數(shù)) LONG lNewLineBytes; / 指向源圖像的指針 LPSTR lpDIBBits; / 指向源象素的指針 LPSTR lpSrc; / 旋轉(zhuǎn)后新DIB句柄 HDIB hDIB; / 指向旋轉(zhuǎn)圖像對應(yīng)象素的指針 LPSTR lpDst; /
3、指向旋轉(zhuǎn)圖像的指針 LPSTR lpNewDIB; LPSTR lpNewDIBBits; / 指向BITMAPINFO結(jié)構(gòu)的指針(Win3.0) LPBITMAPINFOHEADER lpbmi; / 指向BITMAPCOREINFO結(jié)構(gòu)的指針 LPBITMAPCOREHEADER lpbmc; / 循環(huán)變量(象素在新DIB中的坐標) LONG i; LONG j; / 象素在源DIB中的坐標 LONG i0; LONG j0; / 旋轉(zhuǎn)角度(弧度) float fRotateAngle; / 旋轉(zhuǎn)角度的正弦和余弦 float fSina, fCosa; / 源圖四個角的坐標(以圖像中心為坐
4、標系原點) float fSrcX1,fSrcY1,fSrcX2,fSrcY2,fSrcX3,fSrcY3,fSrcX4,fSrcY4; / 旋轉(zhuǎn)后四個角的坐標(以圖像中心為坐標系原點) float fDstX1,fDstY1,fDstX2,fDstY2,fDstX3,fDstY3,fDstX4,fDstY4; / 兩個中間常量 float f1,f2; / 找到源DIB圖像象素起始位置 lpDIBBits = :FindDIBBits(lpDIB; / 獲取圖像的寬度(4的倍數(shù)) lWidth = :DIBWidth(lpDIB; / 計算圖像每行的字節(jié)數(shù) lLineBytes = WIDT
5、HBYTES(lWidth * 8; / 獲取圖像的高度 lHeight = :DIBHeight(lpDIB; / 將旋轉(zhuǎn)角度從度轉(zhuǎn)換到弧度 fRotateAngle = (float RADIAN(iRotateAngle; / 計算旋轉(zhuǎn)角度的正弦 fSina = (float sin(doublefRotateAngle; / 計算旋轉(zhuǎn)角度的余弦 fCosa = (float cos(doublefRotateAngle; / 計算原圖的四個角的坐標(以圖像中心為坐標系原點) fSrcX1 = (float (- (lWidth - 1 / 2; fSrcY1 = (float ( (l
6、Height - 1 / 2; fSrcX2 = (float ( (lWidth - 1 / 2; fSrcY2 = (float ( (lHeight - 1 / 2; fSrcX3 = (float (- (lWidth - 1 / 2; fSrcY3 = (float (- (lHeight - 1 / 2; fSrcX4 = (float ( (lWidth - 1 / 2; fSrcY4 = (float (- (lHeight - 1 / 2; / 計算新圖四個角的坐標(以圖像中心為坐標系原點) fDstX1 = fCosa * fSrcX1 + fSina * fSrcY1;
7、fDstY1 = -fSina * fSrcX1 + fCosa * fSrcY1; fDstX2 = fCosa * fSrcX2 + fSina * fSrcY2; fDstY2 = -fSina * fSrcX2 + fCosa * fSrcY2; fDstX3 = fCosa * fSrcX3 + fSina * fSrcY3; fDstY3 = -fSina * fSrcX3 + fCosa * fSrcY3; fDstX4 = fCosa * fSrcX4 + fSina * fSrcY4; fDstY4 = -fSina * fSrcX4 + fCosa * fSrcY4; /
8、計算旋轉(zhuǎn)后的圖像實際寬度 lNewWidth = (LONG ( max( fabs(fDstX4 - fDstX1, fabs(fDstX3 - fDstX2 + 0.5; / 計算新圖像每行的字節(jié)數(shù) lNewLineBytes = WIDTHBYTES(lNewWidth * 8; / 計算旋轉(zhuǎn)后的圖像高度 lNewHeight = (LONG ( max( fabs(fDstY4 - fDstY1, fabs(fDstY3 - fDstY2 + 0.5; / 兩個常數(shù),這樣不用以后每次都計算了 f1 = (float (-0.5 * (lNewWidth - 1 * fCosa - 0.
9、5 * (lNewHeight - 1 * fSina + 0.5 * (lWidth - 1; f2 = (float ( 0.5 * (lNewWidth - 1 * fSina - 0.5 * (lNewHeight - 1 * fCosa + 0.5 * (lHeight - 1; / 分配內(nèi)存,以保存新DIB hDIB = (HDIB :GlobalAlloc(GHND, lNewLineBytes * lNewHeight + *(LPDWORDlpDIB + :PaletteSize(lpDIB; / 判斷是否內(nèi)存分配失敗 if (hDIB = NULL / 分配內(nèi)存失敗 ret
10、urn NULL; / 鎖定內(nèi)存 lpNewDIB = (char * :GlobalLock(HGLOBAL hDIB; / 復(fù)制DIB信息頭和調(diào)色板 memcpy(lpNewDIB, lpDIB, *(LPDWORDlpDIB + :PaletteSize(lpDIB; / 找到新DIB象素起始位置 lpNewDIBBits = :FindDIBBits(lpNewDIB; / 獲取指針 lpbmi = (LPBITMAPINFOHEADERlpNewDIB; lpbmc = (LPBITMAPCOREHEADERlpNewDIB; / 更新DIB中圖像的高度和寬度 if (IS_WIN3
11、0_DIB(lpNewDIB / 對于Windows 3.0 DIB lpbmi-biWidth = lNewWidth; lpbmi-biHeight = lNewHeight; else / 對于其它格式的DIB lpbmc-bcWidth = (unsigned short lNewWidth; lpbmc-bcHeight = (unsigned short lNewHeight; / 針對圖像每行進行操作 for(i = 0; i lNewHeight; i+ / 針對圖像每列進行操作 for(j = 0; j = 0 & (j0 = 0 & (i0 lHeight / 指向源DIB第
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年蘇教版七年級生物學(xué)上下冊期末模擬考試題卷(一)
- 工業(yè)廢棄物處理技術(shù)
- 工業(yè)廢水處理技術(shù)與案例分享
- 工業(yè)機器人技術(shù)與產(chǎn)業(yè)發(fā)展
- 工業(yè)用地效率評價與提升途徑
- 工業(yè)機器人技術(shù)及其產(chǎn)業(yè)升級的推動力
- 工業(yè)機器人技術(shù)的發(fā)展及應(yīng)用前景
- 工業(yè)物聯(lián)網(wǎng)的推進與智能制造的實踐
- 工業(yè)節(jié)能與新能源的融合實踐
- 工業(yè)熱處理中的機器學(xué)習(xí)技術(shù)應(yīng)用
- 上海浦東新區(qū)公辦學(xué)校儲備教師教輔招聘筆試真題2024
- 2025年中國水性馬克筆行業(yè)市場前景預(yù)測及投資價值評估分析報告
- 電動汽車充換電站建設(shè)資料標準
- 南郵綜評面試題目及答案
- 23G409先張法預(yù)應(yīng)力混凝土管樁
- DL∕T 1498.2-2016 變電設(shè)備在線監(jiān)測裝置技術(shù)規(guī)范 第2部分:變壓器油中溶解氣體在線監(jiān)測裝置
- 集裝箱正面吊作業(yè)安全措施及流程要點
- 射流器計算軟件
- SCH系列鋼管通徑壁厚對照公制版
- 18無財產(chǎn)無債務(wù)1個子女——離婚協(xié)議書范本模版
- 202X—202X學(xué)年第二學(xué)期教學(xué)工作總結(jié)
評論
0/150
提交評論