《Visual C實(shí)踐與提高―數(shù)字圖像處理與工程應(yīng)用篇》_第1頁(yè)
《Visual C實(shí)踐與提高―數(shù)字圖像處理與工程應(yīng)用篇》_第2頁(yè)
《Visual C實(shí)踐與提高―數(shù)字圖像處理與工程應(yīng)用篇》_第3頁(yè)
《Visual C實(shí)踐與提高―數(shù)字圖像處理與工程應(yīng)用篇》_第4頁(yè)
《Visual C實(shí)踐與提高―數(shù)字圖像處理與工程應(yīng)用篇》_第5頁(yè)
已閱讀5頁(yè),還剩27頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第五章圖像的幾何變換數(shù)字圖像平移圖像平移函數(shù)/* 函數(shù)名稱:Translation(LPSTR lpSrcStartBits, long lWidth, long lHeight, long lXOffset,long lYOffset,long lLineBytes,long lDstLineBytes* 函數(shù)參數(shù):* LPSTR lpSrcStartBits,指向源DIB起始像素的指針* long lWidth,DIB圖象的寬度* long lHeight,DIB圖象的高度* long lXOffset,X方向偏移量* long lYOffset,Y方向偏移量* long lLineByt

2、es,DIB圖象的行字節(jié)數(shù),為4的倍數(shù)* long lDstLineBytes,臨時(shí)DIB圖象的行字節(jié)數(shù),為4的倍數(shù)* 函數(shù)類型:BOOL* 函數(shù)功能:該函數(shù)用來(lái)平移DIB圖象*/ BOOL Translation(LPSTR lpSrcStartBits, long lWidth, long lHeight,long lXOffset, long lYOffset,long lLineBytes,long lDstLineByteslong i; /行循環(huán)變量long j; /列循環(huán)變量LPSTR lpSrcDIBBits; /指向源像素的指針LPSTR lpDstDIBBits; /指向臨

3、時(shí)圖象對(duì)應(yīng)像素的指針LPSTR lpDstStartBits; /指向臨時(shí)圖象對(duì)應(yīng)像素的指針HLOCAL hDstDIBBits; /臨時(shí)圖象句柄hDstDIBBits= LocalAlloc(LHND, lWidth * lDstLineBytes;/ 分配臨時(shí)內(nèi)存lpDstStartBits= (char * LocalLock(hDstDIBBits;/ 鎖定內(nèi)存if (hDstDIBBits= NULL/ 判斷是否內(nèi)存分配return FALSE;/ 分配內(nèi)存失敗for(i = 0; i lHeight; i+/ 行for(j = 0; j = 0 & (j-lYOffset= 0 &

4、 (i-lXOffset GetHObject(;/ 鎖定DIBif (pDoc-m_dib.GetColorNum(lpSrcDib != 256/ 判斷是否是8-bpp位圖AfxMessageBox(對(duì)不起,不是256色位圖!;/ 警告:GlobalUnlock(HGLOBAL pDoc-GetHObject(;/ 解除鎖定return; /返回 /判斷是否是8-bpp位圖,不是則返回lpSrcStartBits=pDoc-m_dib.GetBits(lpSrcDib; / 找到DIB圖象像素起始位置lSrcWidth= pDoc-m_dib.GetWidth(lpSrcDib; / 獲取

5、圖象的寬度lSrcHeight= pDoc-m_dib.GetHeight(lpSrcDib; / 獲取圖象的高度lSrcLineBytes=pDoc-m_dib.GetReqByteWidth(lSrcWidth * 8; / 計(jì)算圖象每行的字節(jié)數(shù)/ lDstLineBytes=pDoc-m_dib.GetReqByteWidth(lSrcHeight * 8; / 計(jì)算新圖象每行的字節(jié)數(shù)CDlgTran TranPara;/ 創(chuàng)建對(duì)話框if (TranPara.DoModal( != IDOK/ 顯示對(duì)話框,提示用戶設(shè)定量return;int temver=TranPara.m_verOf

6、f;int temhor=TranPara.m_horOff;if (Translation(lpSrcStartBits, lSrcWidth,lSrcHeight,/ 調(diào)用Translation(函數(shù)平移DIB temver,temhor,lSrcLineBytes,lDstLineBytespDoc-SetModifiedFlag(TRUE; / 設(shè)置臟標(biāo)記pDoc-UpdateAllViews(NULL; / 更新視圖:GlobalUnlock(HGLOBAL pDoc-GetHObject(; / 解除鎖定elseAfxMessageBox(_T(分配內(nèi)存失敗!;/警告數(shù)字圖像旋轉(zhuǎn)圖

7、像旋轉(zhuǎn)函數(shù)/* 函數(shù)名稱:Rotate(LPSTR lpSrcDib, LPSTR lpSrcStartBits,long lWidth, long lHeight,long lLineBytes, WORD palSize, long lDstWidth,long lDstHeight,long lDstLineBytes,float fSina, float fCosa* 函數(shù)參數(shù):* LPSTR lpSrcDib,指向源DIB的指針* LPSTR lpSrcStartBits,指向源DIB的起始像素的指針* long lWidth,源DIB圖象寬度* long lHeight,源DIB圖

8、象高度* long lLineBytes,源DIB圖象字節(jié)寬度(4的倍數(shù)* WORD palSize,源DIB圖象調(diào)色板大小* long lDstWidth,目標(biāo)圖象寬度* long lDstHeight,目標(biāo)DIB圖象高度* long lDstLineBytes,目標(biāo)DIB圖象行字節(jié)數(shù)(4的倍數(shù)* float fSina,旋轉(zhuǎn)角的余弦,說(shuō)明:為了避免兩次求取正余弦,這里作為兩個(gè)函數(shù)參數(shù)來(lái)用* float fCosa,旋轉(zhuǎn)角的正弦* 函數(shù)類型:HGLOBAL* 函數(shù)功能:用來(lái)旋轉(zhuǎn)DIB圖象*/ HGLOBAL Rotate(LPSTR lpSrcDib, LPSTR lpSrcStartBit

9、s,long lWidth, long lHeight,long lLineBytes, WORD palSize, long lDstWidth,long lDstHeight,long lDstLineBytes,float fSina, float fCosafloat varFloat1; /浮點(diǎn)參數(shù)變量1float varFloat2; /浮點(diǎn)參數(shù)變量2LPSTR lpDstDib; /指向臨時(shí)圖象的指針long i; /行循環(huán)變量long j; /列循環(huán)變量long i1; /行循環(huán)變量long j1; /列循環(huán)變量LPSTR lpSrcDIBBits; /指向源像素的指針LPST

10、R lpDstDIBBits; /指向臨時(shí)圖象對(duì)應(yīng)像素的指針LPSTR lpDstStartBits; /指向臨時(shí)圖象對(duì)應(yīng)像素的指針LPBITMAPINFOHEADER lpbmi;/ 指向BITMAPINFOHEADER結(jié)構(gòu)的指針varFloat1= (float (-0.5 * (lDstWidth - 1 * fCosa - 0.5 * (lDstHeight - 1 * fSina/ 將經(jīng)常用到的兩個(gè)常數(shù)事先求出,以便作為常數(shù)使用+ 0.5 * (lDstWidth - 1;varFloat2= (float ( 0.5 * (lDstWidth - 1 * fSina - 0.5 *

11、 (lDstHeight - 1 * fCosa+ 0.5 * (lDstHeight - 1;HGLOBAL hDIB = (HGLOBAL :GlobalAlloc(GHND, lDstLineBytes * lDstHeight + *(LPDWORDlpSrcDib +palSize;/ 分配內(nèi)存,以保存新DIBif (hDIB = NULL/ 判斷是否是有效的DIB對(duì)象return FALSE;/ 不是,則返回lpDstDib= (char * :GlobalLock(HGLOBAL hDIB;/ 鎖定內(nèi)存memcpy(lpDstDib,lpSrcDib, *(LPDWORDlpSr

12、cDib +palSize;/ 復(fù)制DIB信息頭和調(diào)色板lpbmi = (LPBITMAPINFOHEADERlpDstDib;/ 獲取指針lpbmi-biHeight=lDstHeight;/ 更新DIB中圖象的高度和寬度lpbmi-biWidth =lDstWidth;lpDstStartBits=lpDstDib+ *(LPDWORDlpDstDib+palSize;/ 求像素起始位置,作用如同:FindDIBBits(gCo.lpSrcDib,這里嘗試使用了這種方法,以避免對(duì)全局函數(shù)的調(diào)用for(i = 0; i lDstHeight; i+/ 行操作for(j = 0; j = 0

13、& (j1= 0 & (i1GetHObject(;/ 鎖定DIBif (pDoc-m_dib.GetColorNum(lpSrcDib != 256/ 判斷是否是8-bpp位圖AfxMessageBox(對(duì)不起,不是256色位圖!;/ 警告:GlobalUnlock(HGLOBAL pDoc-GetHObject(;/ 解除鎖定return; /返回 /判斷是否是8-bpp位圖,不是則返回lpSrcStartBits=pDoc-m_dib.GetBits(lpSrcDib; / 找到DIB圖象像素起始位置lSrcWidth= pDoc-m_dib.GetWidth(lpSrcDib; / 獲

14、取圖象的寬度lSrcHeight= pDoc-m_dib.GetHeight(lpSrcDib; / 獲取圖象的高度lSrcLineBytes=pDoc-m_dib.GetReqByteWidth(lSrcWidth * 8; / 計(jì)算圖象每行的字節(jié)數(shù)long lDstLineBytes;/ CDlgRot RotPara;/ 創(chuàng)建對(duì)話框if(RotPara.DoModal( != IDOK/ 顯示對(duì)話框,設(shè)定旋轉(zhuǎn)角度return;DWORD palSize=pDoc-m_dib.GetPalSize(lpSrcDib;float fRotateAngle = (float AngleToRa

15、dian(RotPara.m_rotAngle;/ 將旋轉(zhuǎn)角度從度轉(zhuǎn)換到弧度f(wàn)loat fSina = (float sin(doublefRotateAngle;/ 計(jì)算旋轉(zhuǎn)角度的正余弦float fCosa = (float cos(doublefRotateAngle;float fSrcX1,fSrcY1,fSrcX2,fSrcY2,fSrcX3,fSrcY3,fSrcX4,fSrcY4;/ 旋轉(zhuǎn)前四個(gè)角的坐標(biāo)(以圖象中心為坐標(biāo)系原點(diǎn)float fDstX1,fDstY1,fDstX2,fDstY2,fDstX3,fDstY3,fDstX4,fDstY4;/ 旋轉(zhuǎn)后四個(gè)角的坐標(biāo)(以圖象

16、中心為坐標(biāo)系原點(diǎn)fSrcX1 = (float (- (lSrcWidth - 1 / 2;/ 計(jì)算原圖的四個(gè)角的坐標(biāo)fSrcY1 = (float ( (lSrcHeight - 1 / 2;fSrcX2 = (float ( (lSrcWidth - 1 / 2;fSrcY2 = (float ( (lSrcHeight - 1 / 2;fSrcX3 = (float (- (lSrcWidth - 1 / 2;fSrcY3 = (float (- (lSrcHeight - 1 / 2;fSrcX4 = (float ( (lSrcWidth - 1 / 2;fSrcY4 = (floa

17、t (- (lSrcHeight - 1 / 2;fDstX1 = fCosa * fSrcX1 + fSina * fSrcY1;/ 計(jì)算新圖四個(gè)角的坐標(biāo)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

18、 * fSrcX4 + fSina * fSrcY4;fDstY4 = -fSina * fSrcX4 + fCosa * fSrcY4;lDstWidth= (long ( max( fabs(fDstX4 - fDstX1, fabs(fDstX3 - fDstX2 + 0.5;/ 計(jì)算旋轉(zhuǎn)后的圖象實(shí)際寬度lDstLineBytes=pDoc-m_dib.GetReqByteWidth(lDstWidth * 8;/ 計(jì)算新圖象每行的字節(jié)數(shù)lDstHeight= (long ( max( fabs(fDstY4 - fDstY1, fabs(fDstY3 - fDstY2 + 0.5;/

19、計(jì)算旋轉(zhuǎn)后的圖象高度HGLOBAL hDstDIB = NULL;/ 創(chuàng)建新DIBhDstDIB = (HGLOBAL Rotate(lpSrcDib,lpSrcStartBits,lSrcWidth,lSrcHeight,lSrcLineBytes, palSize,lDstWidth,lDstHeight,lDstLineBytes,fSina,fCosa;/ 調(diào)用Rotate(函數(shù)旋轉(zhuǎn)DIBif(hDstDIB != NULL/ 判斷旋轉(zhuǎn)是否成功pDoc-UpdateObject(hDstDIB;/ 替換DIB,同時(shí)釋放舊DIB對(duì)象pDoc-SetDib(;/ 更新DIB大小和調(diào)色板pD

20、oc-SetModifiedFlag(TRUE; / 設(shè)置臟標(biāo)記pDoc-UpdateAllViews(NULL; / 更新視圖:GlobalUnlock(HGLOBAL pDoc-GetHObject(; / 解除鎖定elseAfxMessageBox(_T(分配內(nèi)存失敗!;/ 警告數(shù)字圖像縮放圖像縮放函數(shù)/* 函數(shù)名稱:Zoom(LPSTR lpSrcDib, LPSTR lpSrcStartBits,long lWidth, long lHeight,long lLineBytes, WORD palSize, long lDstWidth,long lDstHeight,long lD

21、stLineBytes,float fXZoomRatio, float fYZoomRatio * 函數(shù)參數(shù):* LPSTR lpSrcDib,指向源DIB的指針* LPSTR lpSrcStartBits,指向源DIB的起始像素的指針* long lWidth,源DIB圖象寬度* long lHeight,源DIB圖象高度* long lLineBytes,源DIB圖象字節(jié)寬度(4的倍數(shù)* WORD palSize,源DIB圖象調(diào)色板大小* long lDstWidth,目標(biāo)圖象寬度* long lDstHeight,目標(biāo)DIB圖象高度* long lDstLineBytes,目標(biāo)DIB圖

22、象行字節(jié)數(shù)(4的倍數(shù)* float fhorRatio,水平縮放比率* float fverRatio,垂直縮放比率* 函數(shù)類型:HGLOBAL* 函數(shù)功能:用來(lái)縮放DIB圖象*/HGLOBAL Zoom(LPSTR lpSrcDib, LPSTR lpSrcStartBits,long lWidth, long lHeight,long lLineBytes, WORD palSize,long lDstWidth,long lDstLineBytes,long lDstHeight,float fhorRatio,float fverRatioLPSTR lpDstDib; /指向臨時(shí)圖象

23、的指針long i; /行循環(huán)變量long j; /列循環(huán)變量long i1; /行循環(huán)變量long j1; /列循環(huán)變量LPSTR lpSrcDIBBits; /指向源像素的指針LPSTR lpDstDIBBits; /指向臨時(shí)圖象對(duì)應(yīng)像素的指針LPSTR lpDstStartBits; /指向臨時(shí)圖象對(duì)應(yīng)像素的指針LPBITMAPINFOHEADER lpbmi;/ 指向BITMAPINFO結(jié)構(gòu)的指針/ 分配內(nèi)存,以保存縮放后的DIBHGLOBAL hDIB = (HGLOBAL :GlobalAlloc(GHND, lDstLineBytes* lDstHeight + *(LPDWOR

24、DlpSrcDib +palSize;if (hDIB = NULL/ 判斷是否是有效的DIB對(duì)象return FALSE;/ 不是,則返回lpDstDib= (char * :GlobalLock(HGLOBAL hDIB;/ 鎖定內(nèi)存memcpy(lpDstDib, lpSrcDib, *(LPDWORDlpSrcDib +palSize;/ 復(fù)制DIB信息頭和調(diào)色板lpDstStartBits=lpDstDib+ *(LPDWORDlpDstDib/ 找到新DIB像素起始位置+palSize;/ 求像素起始位置,作用如同:FindDIBBits(lpSrcDib,這里嘗試使用了這種方法,

25、以避免對(duì)全局函數(shù)的調(diào)用lpbmi = (LPBITMAPINFOHEADERlpDstDib;/ 獲取指針lpbmi-biWidth = lDstWidth;/ 更新DIB中圖象的高度和寬度lpbmi-biHeight =lDstHeight;for(i = 0; i lDstHeight; i+/ 行操作for(j = 0; j = 0 & (j1= 0 & (i1GetHObject(;/ 鎖定DIBif (pDoc-m_dib.GetColorNum(lpSrcDib != 256/ 判斷是否是8-bpp位圖AfxMessageBox(對(duì)不起,不是256色位圖!;/ 警告:GlobalU

26、nlock(HGLOBAL pDoc-GetHObject(;/ 解除鎖定return; /返回lpSrcStartBits=pDoc-m_dib.GetBits(lpSrcDib; / 找到DIB圖象像素起始位置lSrcWidth= pDoc-m_dib.GetWidth(lpSrcDib; / 獲取圖象的寬度lSrcHeight= pDoc-m_dib.GetHeight(lpSrcDib; / 獲取圖象的高度lSrcLineBytes=pDoc-m_dib.GetReqByteWidth(lSrcWidth * 8; / 計(jì)算圖象每行的字節(jié)數(shù)/ DWORD palSize=pDoc-m_

27、dib.GetPalSize(lpSrcDib;CDlgZoom ZoomPara;/ 創(chuàng)建對(duì)話框,設(shè)定平移量if (ZoomPara.DoModal( != IDOKreturn;float fX = ZoomPara.m_horZoom;/ 獲取設(shè)定的平移量,縮放比率float fY = ZoomPara.m_verZoom;lDstWidth= (long (lSrcWidth*fX + 0.5;/ 計(jì)算縮放后的圖象實(shí)際寬度,加0.5是由于強(qiáng)制類型轉(zhuǎn)換時(shí)不四舍五入,而是直接截去小數(shù)部分lDstLineBytes=pDoc-m_dib.GetReqByteWidth(lDstWidth *

28、 8; /轉(zhuǎn)換后圖象應(yīng)有的行字節(jié)數(shù),為4的倍數(shù)lDstHeight= (long (lSrcHeight * fY + 0.5;/ 計(jì)算縮放后的圖象高度HGLOBAL hDstDIB = NULL;/ 創(chuàng)建新DIBhDstDIB = (HGLOBAL Zoom(lpSrcDib,lpSrcStartBits,lSrcWidth,lSrcHeight,lSrcLineBytes,palSize,lDstWidth,lDstLineBytes,lDstHeight,fX, fY;/ 調(diào)用Zoom(函數(shù)轉(zhuǎn)置DIBif(hDstDIB != NULL/ 判斷旋轉(zhuǎn)是否成功pDoc-UpdateObjec

29、t(hDstDIB;/ 替換DIB,同時(shí)釋放舊DIB對(duì)象pDoc-SetDib(;/ 更新DIB大小和調(diào)色板pDoc-SetModifiedFlag(TRUE; / 設(shè)置臟標(biāo)記pDoc-UpdateAllViews(NULL; / 更新視圖:GlobalUnlock(HGLOBAL pDoc-GetHObject(; / 解除鎖定elseAfxMessageBox(_T(分配內(nèi)存失敗!;/ 警告數(shù)字圖像轉(zhuǎn)置圖像轉(zhuǎn)置函數(shù)/* 函數(shù)名稱:* Transpose(LPSTR lpSrcDib,LPSTR lpDibBits,long lWidth,long lHeight,long lLineByt

30、es,long lDstLineBytes* 函數(shù)參數(shù):* LPSTR lpSrcDib,指向源DIB的指針LPSTR lpSrcStartBits,指向DIB起始像素的指針long lWidth,DIB圖象的寬度long lHeight,DIB圖象的高度long lLineBytes,DIB圖象的行字節(jié)數(shù),為4的倍數(shù)long lDstLineBytes,臨時(shí)DIB圖象的行字節(jié)數(shù),為4的倍數(shù)* 函數(shù)類型:BOOL* 函數(shù)功能:該函數(shù)用來(lái)轉(zhuǎn)置DIB圖象*/BOOL Transpose(LPSTR lpSrcDib,LPSTR lpSrcStartBits,long lWidth,long lHe

31、ight,long lLineBytes,long lDstLineByteslong i; /行循環(huán)變量long j; /列循環(huán)變量LPSTR lpSrcDIBBits; /指向源像素的指針LPSTR lpDstDIBBits; /指向臨時(shí)圖象對(duì)應(yīng)像素的指針LPSTR lpDstStartBits; /指向臨時(shí)圖象對(duì)應(yīng)像素的指針HLOCAL hDstDIBBits; /臨時(shí)圖象句柄LPBITMAPINFOHEADER lpbmi; / 指向BITMAPINFOHEADER結(jié)構(gòu)的指針lpbmi = (LPBITMAPINFOHEADERlpSrcDib;hDstDIBBits= LocalAl

32、loc(LHND, lWidth * lDstLineBytes;/ 分配臨時(shí)內(nèi)存if (hDstDIBBits= NULL / 判斷是否內(nèi)存分配return FALSE; / 分配內(nèi)存失敗lpDstStartBits= (char * LocalLock(hDstDIBBits; / 鎖定內(nèi)存for(i = 0; i lHeight; i+ / 針對(duì)圖象每行進(jìn)行操作for(j = 0; j biWidth = lHeight;lpbmi-biHeight = lWidth;LocalUnlock(hDstDIBBits; / 釋放內(nèi)存LocalFree(hDstDIBBits;return

33、TRUE; / 返回該函數(shù)調(diào)用函數(shù)CDImagePorcess View視圖類的/圖像轉(zhuǎn)置void CDImageProcessView:OnTranspose(/ TODO: Add your command handler code hereCDImageProcessDoc* pDoc = GetDocument(;/ long lSrcLineBytes; /圖象每行的字節(jié)數(shù)long lSrcWidth; /圖象的寬度和高度long lSrcHeight;LPSTR lpSrcDib; /指向源圖象的指針LPSTR lpSrcStartBits; /指向源像素的指針long lDstL

34、ineBytes; /新圖象每行的字節(jié)數(shù)lpSrcDib= (LPSTR :GlobalLock(HGLOBAL pDoc-GetHObject(;/ 鎖定DIBif (pDoc-m_dib.GetColorNum(lpSrcDib != 256/ 判斷是否是8-bpp位圖AfxMessageBox(對(duì)不起,不是256色位圖!;/ 警告:GlobalUnlock(HGLOBAL pDoc-GetHObject(;/ 解除鎖定return; /返回 /判斷是否是8-bpp位圖,不是則返回lpSrcStartBits=pDoc-m_dib.GetBits(lpSrcDib; / 找到DIB圖象像素

35、起始位置lSrcWidth= pDoc-m_dib.GetWidth(lpSrcDib; / 獲取圖象的寬度lSrcHeight= pDoc-m_dib.GetHeight(lpSrcDib; / 獲取圖象的高度lSrcLineBytes=pDoc-m_dib.GetReqByteWidth(lSrcWidth * 8; / 計(jì)算圖象每行的字節(jié)數(shù)/lDstLineBytes=pDoc-m_dib.GetReqByteWidth(lSrcHeight * 8; / 計(jì)算新圖象每行的字節(jié)數(shù)if (Transpose(lpSrcDib,lpSrcStartBits,lSrcWidth,lSrcHei

36、ght,lSrcLineBytes,lDstLineBytes / 調(diào)用Transpose(函數(shù)轉(zhuǎn)置DIB pDoc-SetDib(; / 更新DIB大小和調(diào)色板pDoc-SetModifiedFlag(TRUE; / 設(shè)置臟標(biāo)記pDoc-UpdateAllViews(NULL; / 更新視圖:GlobalUnlock(HGLOBAL pDoc-GetHObject(; / 解除鎖定elseAfxMessageBox(_T(分配內(nèi)存失敗!; / 警告數(shù)字圖像垂直鏡像圖像垂直鏡像函數(shù)/* 函數(shù)名稱:Mirrorchuizhi(LPSTR lpSrcStartBits, long lWidth,

37、long lHeight,long lLineBytes* 函數(shù)參數(shù):LPSTR lpSrcStartBits,指向DIB起始像素的指針long lWidth,DIB圖象的寬度long lHeight,DIB圖象的高度long lLineBytes,DIB圖象的行字節(jié)數(shù),為4的倍數(shù)* 函數(shù)類型:BOOL* 函數(shù)功能:該函數(shù)用來(lái)鏡像DIB圖象,本程序?qū)崿F(xiàn)垂直鏡像*/BOOL Mirrorchuizhi(LPSTR lpSrcStartBits, long lWidth, long lHeight,long lLineByteslong i; /行循環(huán)變量long j; /列循環(huán)變量LPSTR l

38、pSrcDIBBits; /指向源像素的指針LPSTR lpDstDIBBits; /指向臨時(shí)圖象對(duì)應(yīng)像素的指針HLOCAL hDstDIBBits; /臨時(shí)圖象句柄LPSTR lpBits; / 指向中間像素的指針,當(dāng)復(fù)制圖象時(shí),提供臨時(shí)的像素內(nèi)存空間hDstDIBBits= LocalAlloc(LHND, lLineBytes;/ 分配臨時(shí)內(nèi)存保存行圖象if (hDstDIBBits = NULLreturn FALSE; / 分配內(nèi)存失敗lpDstDIBBits= (char * LocalLock(hDstDIBBits;/ 鎖定for(i = 0; i lHeight/2; i+/

39、 垂直鏡像,針對(duì)圖象每行進(jìn)行操作lpSrcDIBBits= (char *lpSrcStartBits + lLineBytes * i;/ 指向倒數(shù)第i行像素起點(diǎn)的指針lpBits= (char *lpSrcStartBits + lLineBytes * (lHeight-i - 1 ;/ 指向第i行像素起點(diǎn)的指針memcpy(lpDstDIBBits,lpBits,lLineBytes;/備份一行,寬度為lWidthmemcpy(lpBits,lpSrcDIBBits,lLineBytes;/將倒數(shù)第i行像素復(fù)制到第i行memcpy(lpSrcDIBBits,lpDstDIBBits,lLineBytes;/將第i行像素復(fù)制到倒數(shù)第i行LocalUnlock(hDstDIBBits;/ 釋放內(nèi)存LocalFree(hDstDIBBits;re

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論