水平镜像就是x=图像宽度-原来的x,
垂直镜像就是y=图像高度-原来的y
void CDib::Mirror_Horizontal()
{
//指向原图像指针
LPBYTE lpSrc;
LPBYTE p_data = GetData();
//指向复制区域的指针
LPBYTE lpDst;
//图像的宽和高
LONG width = GetWidth();
LONG height = GetHeight();;
//暂时分配内存,以保存新图像
LPBYTE temp = new BYTE[width * height];
for (int j = 0; j < height; j++)
{
for (int i = 0; i < width; i++)
{
//计算该像素在原DIB中的坐标
lpSrc = (LPBYTE)p_data + width * j + i;
lpDst = (LPBYTE)temp + width * (j + 1) - i;
*lpDst = *lpSrc;
}
}
//复制平移后的图像
memcpy(p_data, temp, width* height);
}
void CDib::Mirror_Vertical()
{
//指向原图像指针
LPBYTE lpSrc;
LPBYTE p_data = GetData();
//指向复制区域的指针
LPBYTE lpDst;
//图像的宽和高
LONG width = GetWidth();
LONG height = GetHeight();;
//暂时分配内存,以保存新图像
LPBYTE temp = new BYTE[width * height];
for (int i = 0; i < width; i++)
{
for (int j = 0; j < height; j++)
{
//计算该像素在原DIB中的坐标
lpSrc = (LPBYTE)p_data + width * j + i;
lpDst = (LPBYTE)temp + width * (height - j - 1) + i;
*lpDst = *lpSrc;
}
}
//复制平移后的图像
memcpy(p_data, temp, width* height);
}
在构造函数中,读取文件后,调用
CMy1_showbitmapView::CMy1_showbitmapView()
{
_cdib.LoadFile (“D:/Test/DataProcess/result.bmp”);
//_cdib.Mirror_Horizontal();
_cdib.Mirror_Vertical();
}