欢迎来到天天文库
浏览记录
ID:55771850
大小:76.50 KB
页数:26页
时间:2020-06-07
《常用图像处理算法.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、8种常用图像处理算法(函数)------以下所有函数均放在CimageProcessingView.ccp下1.图像镜像voidCCimageProcessingView::OnGeomTrpo(){//获取指向文档的指针CCimageProcessingDoc*pDoc=GetDocument();//指向DIB的指针LPSTRlpDIB;//锁定DIBlpDIB=(LPSTR)::GlobalLock((HGLOBAL)pDoc->GetHDIB());//设置光标状态为等待状态BeginWaitCursor();//调用VertMirror函数镜像图象if(VertMir
2、ror(lpDIB)){//设置文档修改标记pDoc->SetModifiedFlag(TRUE);//更新所有视图pDoc->UpdateAllViews(NULL);}else{//提示信息MessageBox("实现图象镜像失败!");}//解除锁定::GlobalUnlock((HGLOBAL)pDoc->GetHDIB());//结束光标等待状态EndWaitCursor();}*函数名称:**VertMirror()**参数:**LPSTRlpDIB//指向源DIB图像指针**返回值:**BOOL//镜像成功返回TRUE,否则返回FALSE。**说明:**该函数用来
3、实现DIB图像的垂直镜像。*BOOLWINAPIVertMirror(LPSTRlpDIB){//原图象宽度LONGlWidth;//原图象高度LONGlHeight;//原图象的颜色数WORDwNumColors;//原图象的信息头结构指针LPBITMAPINFOHEADERlpbmi;//指向原图象和目的图象的像素的指针LPBYTElpSrc,lpDst;//平移后剩余图像在源图像中的位置(矩形区域)CRectrectSrc;//指向原图像像素的指针LPBYTElpDIBBits;//指向复制图像像素的指针LPBYTElpNewDIBBits;//内存句柄HLOCALh;/
4、/循环变量LONGi;//图像每行的字节数LONGlLineBytes;//获取图象的信息头结构的指针lpbmi=(LPBITMAPINFOHEADER)lpDIB;//找到图象的像素位置lpDIBBits=(LPBYTE)::FindDIBBits(lpDIB);//获取图象的宽度lWidth=::DIBWidth(lpDIB);//获取图象的高度lHeight=::DIBHeight(lpDIB);//获取图象的颜色数wNumColors=::DIBNumColors(lpDIB);//计算图像每行的字节数lLineBytes=WIDTHBYTES(lWidth*(lpbm
5、i->biBitCount));//暂时分配内存,以保存新图像h=LocalAlloc(LHND,lLineBytes);//分配内存失败,直接返回if(!h)returnFALSE;//锁定内存lpNewDIBBits=(LPBYTE)LocalLock(h);//如果是256色位图或真彩色位图if(wNumColors==256
6、
7、wNumColors==0){//平移图像,每次移动一行for(i=0;i8、置的问题lpDst=(LPBYTE)lpDIBBits+lLineBytes*(lHeight-i-1);//备份一行memcpy(lpNewDIBBits,lpDst,lLineBytes);//将倒数第i行像素复制到第i行memcpy(lpDst,lpSrc,lLineBytes);//将第i行像素复制到第i行memcpy(lpSrc,lpNewDIBBits,lLineBytes);}}else{AfxMessageBox("只支持256色和真彩色位图");//释放内存LocalUnlock(h);LocalFree(h);returnfalse;}//释放内存Local9、Unlock(h);LocalFree(h);//返回returnTRUE;}2.旋转图像(含对话框这里对话框需要自己建立)voidCCimageProcessingView::OnGeomRota(){//获取指向文档的指针CCimageProcessingDoc*pDoc=GetDocument();//指向DIB的指针LPSTRlpDIB;//锁定DIBlpDIB=(LPSTR)::GlobalLock((HGLOBAL)pDoc->GetHDIB());//缩放比率intiRotaA
8、置的问题lpDst=(LPBYTE)lpDIBBits+lLineBytes*(lHeight-i-1);//备份一行memcpy(lpNewDIBBits,lpDst,lLineBytes);//将倒数第i行像素复制到第i行memcpy(lpDst,lpSrc,lLineBytes);//将第i行像素复制到第i行memcpy(lpSrc,lpNewDIBBits,lLineBytes);}}else{AfxMessageBox("只支持256色和真彩色位图");//释放内存LocalUnlock(h);LocalFree(h);returnfalse;}//释放内存Local
9、Unlock(h);LocalFree(h);//返回returnTRUE;}2.旋转图像(含对话框这里对话框需要自己建立)voidCCimageProcessingView::OnGeomRota(){//获取指向文档的指针CCimageProcessingDoc*pDoc=GetDocument();//指向DIB的指针LPSTRlpDIB;//锁定DIBlpDIB=(LPSTR)::GlobalLock((HGLOBAL)pDoc->GetHDIB());//缩放比率intiRotaA
此文档下载收益归作者所有