日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言中实现自动平移,c语言实现图像的旋转与平移

發布時間:2024/7/23 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言中实现自动平移,c语言实现图像的旋转与平移 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

y

y

y

(4) ty≥height,圖象完全移出了屏幕,不用做任何處理。

這種做法利用了位圖存儲的連續性,即同一行的象素在內存中是相鄰的。利用 memcpy函數, 從(x ,y )-x )處,拷 0 0 點開始,一次可以拷貝一整行(寬度為 x1 0 ,然后將內存指針移到(x ,y +1)0 0 貝下一行。這樣拷貝(y -y )1 0 行就完成了全部操作,避免了一個一個象素的計算,提高了效率。 Translation的源代碼如下: int xOffset=0,yOffset=0; BOOL Translation(HWND hWnd) {

DLGPROC DWORD

dlgInputBox = NULL; OffBits,BufSize;

LPBITMAPINFOHEADER lpImgData; LPSTR HLOCAL

lpPtr;

hTempImgData;

LPBITMAPINFOHEADER lpTempImgData; LPSTR int int int BOOL HDC HFILE int

lpTempPtr;

SrcX0,SrcY0,SrcX1,SrcY1; DstX0,DstY0,DstX1,DstY1; RectWidth,RectHeight; xVisible,yVisible; hDc; hf; i;

//出現對話框,輸入 x偏移量 xOffset,和 y偏移量 yOffset

dlgInputBox = (DLGPROC) MakeProcInstance ( (FARPROC)InputBox,ghInst ); DialogBox (ghInst, \FreeProcInstance ( (FARPROC) dlgInputBox );

//OffBits為 BITMAPINFOHEADER結構長度加調色板的大小 OffBits=bf.bfOffBits-sizeof(BITMAPFILEHEADER);

BufSize=OffBits+bi.biHeight*LineBytes;//要開的緩沖區的大小 //為新產生的位圖分配緩沖區內存

if((hTempImgData=LocalAlloc(LHND,BufSize))==NULL) {

MessageBox(hWnd,\MB_ICONEXCLAMATION); return FALSE; //失敗,返回 }

//lpImgData為指向原來位圖數據的指針

lpImgData=(LPBITMAPINFOHEADER)GlobalLock(hImgData); //lpTempImgData為指向新產生位圖數據的指針

lpTempImgData=(LPBITMAPINFOHEADER)LocalLock(hTempImgData); lpPtr=(char *)lpImgData;

lpTempPtr=(char *)lpTempImgData;

//將新的緩沖區中的每個字節都填成 255,這樣以后未處理的象素就是白色 memset(lpTempPtr,(BYTE)255,BufSize);

//兩幅圖之間的頭信息,包括調色板都是相同的,所以直接拷貝頭和調色板 memcpy(lpTempPtr,lpPtr,OffBits);

//xVisible為 FALSE時,表示 x方向已經移出了可顯示的范圍 xVisible=TRUE; if( xOffset<= -bi.biWidth ) xVisible=FALSE; else if( xOffset<=0){

DstX0=0; //表示移動后,有圖區域的左上角點的 x坐標

DstX1=bi.biWidth+xOffset; //表示移動后,有圖區域的右下角點的 x坐標 }

else if ( xOffsetxVisible=FALSE;

SrcX0=DstX0-xOffset; //對應 DstX0在原圖中的 x坐標 SrcX1=DstX1-xOffset; //對應 DstX1在原圖中的 x坐標 RectWidth=DstX1-DstX0; //有圖區域的寬度

//yVisible為 FALSE時,表示 y方向已經移出了可顯示的范圍 yVisible=TRUE;

if( yOffset<= -bi.biHeight ) yVisible=FALSE; else if( yOffset<=0){

DstY0=0; //表示移動后,有圖區域的左上角點的 y坐標

DstY1=bi.biHeight+yOffset; //表示移動后,有圖區域的右下角點的 y坐標 }

else if ( yOffset} else

yVisible=FALSE;

SrcY0=DstY0-yOffset; //對應 DstY0在原圖中的 y坐標 SrcY1=DstY1-yOffset; //對應 DstY1在原圖中的 y坐標 RectHeight=DstY1-DstY0; //有圖區域的高度

if( xVisible && yVisible){ //x,y方向都沒有完全移出可顯示的范圍 for(i=0;i//lpPtr指向要拷貝的那一行的最左邊的象素對應在原圖中的位 //置。特別要注意的是,由于.bmp是上下顛倒的,偏移是 //(BufSize-LineBytes-(i+SrcY0)*LineBytes)+SrcX0,而不是 //(i+SrcY0)*LineBytes)+SrcX0,你試著舉個例子就明白了。 lpPtr=(char*)lpImgData+(BufSize-LineBytes- (i+SrcY0)*LineBytes)+SrcX0;

//lpTempPtr指向要拷貝的那一行的最左邊的象素對應在新圖中//的位置。同樣要注意上面// 的問題。

lpTempPtr=(char*)lpTempImgData+

(BufSize-LineBytes-(i+DstY0)*LineBytes)+DstX0; //拷貝一行(寬度為 RectWidth)

memcpy(lpTempPtr,lpPtr,RectWidth);

} }

以上是由77cn范文大全為大家整理的c語言實現圖像的旋轉與平移的相關范文,本文關鍵詞為語言,實現,圖像,旋轉,平移,實驗,圖象,幾何,變換,參考資,您可以從右上方搜索框檢索更多相關文章,如果您覺得有用,請繼續關注我們并推薦給您的好友,您可以在教育文庫中查看更多范文。

c語言實現圖像的旋轉與平移.doc

免費范文網為全國范文類知名網站,下載全文稍作修改便可使用,即刻完成寫稿任務。

已有11人下載

百度搜索“77cn”或“免費范文網”即可找到本站免費閱讀全部范文。收藏本站方便下次閱讀,免費范文網,提供經典小說教育文庫c語言實現圖像的旋轉與平移在線全文閱讀。

本文來自:免費范文網(www.77cn.com.cn) 轉載請注明出處!

總結

以上是生活随笔為你收集整理的c语言中实现自动平移,c语言实现图像的旋转与平移的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。