欢迎来到天天文库
浏览记录
ID:57611740
大小:45.50 KB
页数:6页
时间:2020-08-29
《图像旋转算法.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、//两个常数,这样不用以后每次都计算了f1=(float)(-0.5*(lNewWidth-1)*fCosa-0.5*(lNewHeight-1)*fSina+0.5*(lWidth-1));f2=(float)(0.5*(lNewWidth-1)*fSina-0.5*(lNewHeight-1)*fCosa+0.5*(lHeight-1));//分配内存,以保存新DIBhDIB=(HDIB)::GlobalAlloc(GHND,lNewLineBytes*lNewHeight+*(LPDWORD)lpDIB+::Pa
2、letteSize(lpDIB));//判断是否内存分配失败if(hDIB==NULL){//分配内存失败returnNULL;}//锁定内存lpNewDIB=(char*)::GlobalLock((HGLOBAL)hDIB);//复制DIB信息头和调色板memcpy(lpNewDIB,lpDIB,*(LPDWORD)lpDIB+::PaletteSize(lpDIB));//找到新DIB象素起始位置lpNewDIBBits=::FindDIBBits(lpNewDIB);//获取指针lpbmi=(LPBITMAPI
3、NFOHEADER)lpNewDIB;lpbmc=(LPBITMAPCOREHEADER)lpNewDIB;//更新DIB中图像的高度和宽度if(IS_WIN30_DIB(lpNewDIB)){//对于Windows3.0DIBlpbmi->biWidth=lNewWidth;lpbmi->biHeight=lNewHeight;}else{//对于其它格式的DIBlpbmc->bcWidth=(unsignedshort)lNewWidth;lpbmc->bcHeight=(unsignedshort)lNewHei
4、ght;}//针对图像每行进行操作for(i=0;i5、float)j)*fCosa+((float)i)*fSina+f1+0.5);//判断是否在源图范围内if((j0>=0)&&(j0=0)&&(i06、hDIB;}//顺时针旋转voidCMyDIPView::OnMenuitem32778(){//图像旋转//获取文档CMyDIPDoc*pDoc=GetDocument();//指向DIB的指针LPSTRlpDIB;//锁定DIBlpDIB=(LPSTR)::GlobalLock((HGLOBAL)pDoc->GetHDIB());//判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的旋转,其它的可以类推)if(::DIBNumColors(lpDIB)!=256){//提示用户MessageBox("目7、前只支持256色位图的旋转!","系统提示",MB_ICONINFORMATION8、MB_OK);//解除锁定::GlobalUnlock((HGLOBAL)pDoc->GetHDIB());//返回return;}//旋转角度intiRotateAngle;iRotateAngle=15;//创建新DIBHDIBhNewDIB=NULL;//更改光标形状BeginWaitCursor();//调用RotateDIB()函数旋转DIBhNewDIB=(HDIB)RotateDIB(lpDIB,iRotateAngle)9、;//判断旋转是否成功if(hNewDIB!=NULL){//替换DIB,同时释放旧DIB对象pDoc->ReplaceHDIB(hNewDIB);//更新DIB大小和调色板pDoc->InitDIBData();//设置脏标记pDoc->SetModifiedFlag(TRUE);//重新设置滚动视图大小SetScrollSiz
5、float)j)*fCosa+((float)i)*fSina+f1+0.5);//判断是否在源图范围内if((j0>=0)&&(j0=0)&&(i06、hDIB;}//顺时针旋转voidCMyDIPView::OnMenuitem32778(){//图像旋转//获取文档CMyDIPDoc*pDoc=GetDocument();//指向DIB的指针LPSTRlpDIB;//锁定DIBlpDIB=(LPSTR)::GlobalLock((HGLOBAL)pDoc->GetHDIB());//判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的旋转,其它的可以类推)if(::DIBNumColors(lpDIB)!=256){//提示用户MessageBox("目7、前只支持256色位图的旋转!","系统提示",MB_ICONINFORMATION8、MB_OK);//解除锁定::GlobalUnlock((HGLOBAL)pDoc->GetHDIB());//返回return;}//旋转角度intiRotateAngle;iRotateAngle=15;//创建新DIBHDIBhNewDIB=NULL;//更改光标形状BeginWaitCursor();//调用RotateDIB()函数旋转DIBhNewDIB=(HDIB)RotateDIB(lpDIB,iRotateAngle)9、;//判断旋转是否成功if(hNewDIB!=NULL){//替换DIB,同时释放旧DIB对象pDoc->ReplaceHDIB(hNewDIB);//更新DIB大小和调色板pDoc->InitDIBData();//设置脏标记pDoc->SetModifiedFlag(TRUE);//重新设置滚动视图大小SetScrollSiz
6、hDIB;}//顺时针旋转voidCMyDIPView::OnMenuitem32778(){//图像旋转//获取文档CMyDIPDoc*pDoc=GetDocument();//指向DIB的指针LPSTRlpDIB;//锁定DIBlpDIB=(LPSTR)::GlobalLock((HGLOBAL)pDoc->GetHDIB());//判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的旋转,其它的可以类推)if(::DIBNumColors(lpDIB)!=256){//提示用户MessageBox("目
7、前只支持256色位图的旋转!","系统提示",MB_ICONINFORMATION
8、MB_OK);//解除锁定::GlobalUnlock((HGLOBAL)pDoc->GetHDIB());//返回return;}//旋转角度intiRotateAngle;iRotateAngle=15;//创建新DIBHDIBhNewDIB=NULL;//更改光标形状BeginWaitCursor();//调用RotateDIB()函数旋转DIBhNewDIB=(HDIB)RotateDIB(lpDIB,iRotateAngle)
9、;//判断旋转是否成功if(hNewDIB!=NULL){//替换DIB,同时释放旧DIB对象pDoc->ReplaceHDIB(hNewDIB);//更新DIB大小和调色板pDoc->InitDIBData();//设置脏标记pDoc->SetModifiedFlag(TRUE);//重新设置滚动视图大小SetScrollSiz
此文档下载收益归作者所有