资源预览内容
第1页 / 共33页
第2页 / 共33页
第3页 / 共33页
第4页 / 共33页
第5页 / 共33页
第6页 / 共33页
第7页 / 共33页
第8页 / 共33页
第9页 / 共33页
第10页 / 共33页
亲,该文档总共33页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
8种常用图像处理算法(函数) -以下所有函数均放在CimageProcessingView.ccp下1.图像镜像void CCimageProcessingView:OnGeomTrpo() /获取指向文档的指针CCimageProcessingDoc* pDoc = GetDocument();/指向DIB的指针LPSTRlpDIB;/锁定DIBlpDIB = (LPSTR) :GlobalLock(HGLOBAL) pDoc-GetHDIB();/设置光标状态为等待状态BeginWaitCursor();/调用VertMirror函数镜像图象if (VertMirror(lpDIB)/设置文档修改标记pDoc-SetModifiedFlag(TRUE);/更新所有视图pDoc-UpdateAllViews(NULL);else/提示信息MessageBox(实现图象镜像失败!);/解除锁定:GlobalUnlock(HGLOBAL) pDoc-GetHDIB();/结束光标等待状态EndWaitCursor();/* * * 函数名称: * * VertMirror() * * 参数: * * LPSTR lpDIB /指向源DIB图像指针 * * 返回值: * * BOOL /镜像成功返回TRUE,否则返回FALSE。 * * 说明: * * 该函数用来实现DIB图像的垂直镜像。 * */BOOL WINAPI VertMirror(LPSTR lpDIB)/原图象宽度 LONG lWidth;/原图象高度LONG lHeight;/原图象的颜色数WORD wNumColors;/原图象的信息头结构指针LPBITMAPINFOHEADER lpbmi;/指向原图象和目的图象的像素的指针LPBYTE lpSrc,lpDst;/平移后剩余图像在源图像中的位置(矩形区域)CRectrectSrc;/指向原图像像素的指针LPBYTE lpDIBBits;/指向复制图像像素的指针LPBYTE lpNewDIBBits;/内存句柄HLOCALh;/循环变量LONGi;/图像每行的字节数LONG lLineBytes;/获取图象的信息头结构的指针lpbmi=(LPBITMAPINFOHEADER)lpDIB;/找到图象的像素位置lpDIBBits=(LPBYTE):FindDIBBits(lpDIB);/获取图象的宽度lWidth=:DIBWidth(lpDIB);/获取图象的高度lHeight=:DIBHeight(lpDIB);/获取图象的颜色数wNumColors=:DIBNumColors(lpDIB);/计算图像每行的字节数lLineBytes = WIDTHBYTES(lWidth *(lpbmi-biBitCount);/ 暂时分配内存,以保存新图像h= LocalAlloc(LHND, lLineBytes);/ 分配内存失败,直接返回if (!h)return FALSE;/ 锁定内存lpNewDIBBits = (LPBYTE)LocalLock(h);/如果是256色位图或真彩色位图if(wNumColors=256|wNumColors=0) /平移图像,每次移动一行 for(i = 0; iGetHDIB();/ 缩放比率int iRotaAngle;/ 创建对话框CDlgGeoRota dlgPara;/ 初始化变量值dlgPara.m_iRotaAngle = 90;/ 显示对话框,提示用户设定旋转角度if (dlgPara.DoModal() != IDOK)/ 返回return;/ 获取用户设定的平移量iRotaAngle = dlgPara.m_iRotaAngle;/ 删除对话框delete dlgPara;/创建新DIBHDIB hNewDIB=NULL;/设置光标状态为等待状态BeginWaitCursor();/调用RotateDIB函数旋转DIB图象hNewDIB=(HDIB):RotateDIB(lpDIB,iRotaAngle);/旋转成功if (hNewDIB)/替换原来的DIB图象为新的DIBpDoc-ReplaceHDIB(hNewDIB);/更新DIB图象的大小和调色板pDoc-InitDIBData();/设置文档修改标记pDoc-SetModifiedFlag(TRUE);/调节滚动视图大小SetScrollSizes(MM_TEXT,pDoc-GetDocSize();/更新所有视图pDoc-UpdateAllViews(NULL);else/提示信息MessageBox(实现图象旋转失败!);/解除锁定:GlobalUnlock(HGLOBAL) pDoc-GetHDIB();/结束光标等待状态EndWaitCursor();/* * * 函数名称: * * RotateDIB () * * 参数: * * LPSTR lpDIB /指向源DIB图像指针 * * int iAngle * 说明: * * 该函数用来实现DIB图像的旋转。 * */HGLOBAL WINAPI RotateDIB(LPSTR lpDIB,int iAngle)/原图象宽度 LONG lWidth;/原图象高度LONG lHeight;/旋转后图象宽度 LONG lNewWidth;/旋转后图象高度LONG lNewHeight;/原图象的颜色数WORD wNumColors;/原图象的信息头结构指针LPBITMAPINFOHEADER lpbmi,lpbmi0;/指向原图象和目的图象的像素的指针LPBYTE lpSrc,lpDst;/指向原图像像素的指针LPBYTE lpDIBBits;/指向旋转后图像(像素)的指针LPBYTE lpNewDIBBits;LPSTR lpNewDIB;/旋转后新的DIB句柄HDIBhDIB;/循环变量LONGi,j,i0,j0;/原图像每行的字节数LONG lLineBytes;/旋转后图像每行的字节数LONG lNewLineBytes;/旋转角度的弧度double fArcAngle;/旋转角度的正弦和余弦float fSin,fCos;/旋转前图象四个角的坐标(以图象中心为坐标系原点)float fSrcX1,fSrcY1,fSrcX2,fSrcY2;float fSrcX3,fSrcY3,fSrcX4,fSrcY4;/旋转后图象四个角的坐标(以图象中心为坐标系原点) float fDstX1,fDstY1,fDstX2,fDstY2;float fDstX3,fDstY3,fDstX4,fDstY4;/两个中间量float f1,f2;/找到图象的像素位置lpDIBBits=(LPBYTE):Fi
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号