图像处理 - 镜象处理

来源:互联网 发布:天神互动怎么样 知乎 编辑:程序博客网 时间:2024/05/16 09:15

镜象(mirror)分水平镜象和垂直镜象两种。

镜象的变换矩阵很简单。设原图宽为w,高为h,变换后,图的宽和高不变。

水平镜象的变化矩阵为:

垂直镜象的变化矩阵为:


这里代码是在View.cpp里面加的:

void CMyView::OnShuiping() {// TODO: Add your command handler code hereCMyDoc* poc=GetDocument();Bianhuan(poc->bmpdata,poc->m_info.biWidth,poc->m_info.biHeight);}void CMyView::Bianhuan(BYTE* shuju,int width,int height){BYTE *data;//临时数据存储BYTE *yuan;//原来的数据地址BYTE *bian;//改变后的地址int x0,y0;//原来的坐标int x1,y1;//改变后的坐标LONG zijie;//字节    zijie = WIDTHBYTES(width * 8);data=(BYTE *)new BYTE[zijie*height];for(x1=0;x1<height;x1++)for(y1=0;y1<width;y1++){y0=width-1-y1;//横向改变x0=x1;//纵向不改变bian=data+zijie*x0+y0;yuan=shuju+zijie*x1+y1;*bian=*yuan;}memcpy(shuju,data,zijie*height);delete [] data;Invalidate();}void CMyView::OnChuizhi() {// TODO: Add your command handler code hereCMyDoc* rc=GetDocument();chuizhi(rc->bmpdata,rc->m_info.biWidth,rc->m_info.biHeight);}void CMyView::chuizhi(BYTE* shuju,int width,int height){BYTE *data;//临时数据存储BYTE *yuan;//原来的数据地址BYTE *bian;//改变后的地址int x0,y0;//原来的坐标int x1,y1;//改变后的坐标LONG zijie;//字节    zijie = WIDTHBYTES(width * 8);data=(BYTE *)new BYTE[zijie*height];for(x1=0;x1<height;x1++)for(y1=0;y1<width;y1++){y0=y1;x0=height-1-x1;bian=data+zijie*x0+y0;yuan=shuju+zijie*x1+y1;*bian=*yuan;}memcpy(shuju,data,zijie*height);delete [] data;Invalidate();}

1 0