问题主要集中于图像每一个扫描行的实际字节数,对于8bit灰度图像其扫描行字节数为
int bytesperline = (((width*8)+31)/32*4);
因此水平镜像程序如下:
void CImageProcessBetaView::OnMirrorHorizonal()
{
// TODO: 在此添加命令处理程序代码
//指向源图像
BYTE* lpSrc;
//指向待复制区域
BYTE* lpDst;
BYTE* temp=NULL;//指向复制图像
int i,j;
int height=dib.GetHeight();
int width=dib.GetWidth();
BYTE* m_temp=dib.GetData();//读入初始LOAD的图像
int bytesperline = (((width*8)+31)/32*4);
temp=new BYTE[bytesperline*height+1];
for (int j=0;j<height;j++)
{
for (int i=0;i<bytesperline;i++)
{
lpSrc=m_temp+bytesperline*j+i;
lpDst=temp+bytesperline*(j+1)-i;
*lpDst=*lpSrc;
}
}
memcpy(m_temp,temp,bytesperline*height);//mo_temp用来保存当前界面上显示的数据,存在dib.m_pData
delete temp;
Invalidate();
}