c语言实现图像的旋转与平移

c语言实现图像的旋转与平移

ID:12031873

大小:564.00 KB

页数:17页

时间:2018-07-15

c语言实现图像的旋转与平移_第1页
c语言实现图像的旋转与平移_第2页
c语言实现图像的旋转与平移_第3页
c语言实现图像的旋转与平移_第4页
c语言实现图像的旋转与平移_第5页
资源描述:

《c语言实现图像的旋转与平移》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、实验二图象的几何变换参考资料1平移平移(translation)变换是几何变换中最简单的一种。初始坐标为(x,y)的点经过平移(t,t)(以向00xy右,向下为正方向)后,坐标变为(x,y)。这两点之间的关系是x=x+t,y=y+t。1110x10y下面给出Translation的源代码。算法的思想是先将所有区域填成白色,然后找平移后显示区域的左上角点(x,y)和右下角点(x,y),分几种情况进行处理。0011先看x方向(width指图象的宽度)(1)(2)tx≤-width:很显然,图象完全移出了屏幕,不用做任何处理;-width

2、0:图象区域的x范围从0到width-

3、tx

4、,对应原图的范围从

5、tx

6、到width;(3)0

7、t

8、,对应原图的范围从

9、t

10、到height;yyy0

11、对应原图的范围从0到height-t;yyyty≥height,图象完全移出了屏幕,不用做任何处理。这种做法利用了位图存储的连续性,即同一行的象素在内存中是相邻的。利用memcpy函数,从(x,y)点开始,一次可以拷贝一整行(宽度为x-x),然后将内存指针移到(x,y+1)处,拷001000贝下一行。这样拷贝(y-y)行就完成了全部操作,避免了一个一个象素的计算,提高了效率。10Translation的源代码如下:intxOffset=0,yOffset=0;BOOLTranslation(HWNDhWnd){ DLGPROCdlgInpu

12、tBox=NULL;OffBits,BufSize;lpImgData;DWORDLPBITMAPINFOHEADERLPSTRlpPtr;HLOCALhTempImgData;lpTempImgData;lpTempPtr;LPBITMAPINFOHEADERLPSTRintSrcX0,SrcY0,SrcX1,SrcY1;DstX0,DstY0,DstX1,DstY1;RectWidth,RectHeight;xVisible,yVisible;hDc;intintBOOLHDCHFILEinthf;i;//出现对话框,输入x偏移量xOf

13、fset,和y偏移量yOffsetdlgInputBox=(DLGPROC)MakeProcInstance((FARPROC)InputBox,ghInst);DialogBox(ghInst,"INPUTBOX",hWnd,dlgInputBox);FreeProcInstance((FARPROC)dlgInputBox);//OffBits为BITMAPINFOHEADER结构长度加调色板的大小OffBits=bf.bfOffBits-sizeof(BITMAPFILEHEADER);BufSize=OffBits+bi.biHei

14、ght*LineBytes;//要开的缓冲区的大小//为新产生的位图分配缓冲区内存 if((hTempImgData=LocalAlloc(LHND,BufSize))==NULL){MessageBox(hWnd,"Errorallocmemory!","ErrorMessage",MB_OK

15、MB_ICONEXCLAMATION);returnFALSE;//失败,返回}//lpImgData为指向原来位图数据的指针lpImgData=(LPBITMAPINFOHEADER)GlobalLock(hImgData);//lpTempIm

16、gData为指向新产生位图数据的指针lpTempImgData=(LPBITMAPINFOHEADER)LocalLock(hTempImgData);lpPtr=(char*)lpImgData;lpTempPtr=(char*)lpTempImgData;//将新的缓冲区中的每个字节都填成255,这样以后未处理的象素就是白色memset(lpTempPtr,(BYTE)255,BufSize);//两幅图之间的头信息,包括调色板都是相同的,所以直接拷贝头和调色板memcpy(lpTempPtr,lpPtr,OffBits);//xVis

17、ible为FALSE时,表示x方向已经移出了可显示的范围xVisible=TRUE;if(xOffset<=-bi.biWidth)xVisible=FALSE;elseif(x

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。