19,468
社区成员
发帖
与我相关
我的任务
分享
///***************************************************************/
/*函数名称:JingXiang(bool fangshi)
/*函数类型:void
/*参数说明:fangshi --判断标志为 true 水平镜像,为 false 垂直镜像
/*功能:对图像进行镜像显示。
/***************************************************************/
void JiHeBianHuanDib::JingXiang(bool fangshi)
{
// 指向源图像的指针
LPBYTE lpSrc;
LPBYTE p_data;
// 指向要复制区域的指针
LPBYTE lpDst;
// 指向复制图像的指针
LPBYTE temp;
// 循环变量
LONG i;
LONG j;
//图像的高与宽
long height=this->GetHeight();
long wide=this->GetWidth();
p_data=this->GetData();
// 暂时分配内存,以保存一行图像
temp = new BYTE[wide*height];
// 判断镜像方式
if (fangshi) // 水平镜像
{
if (m_pBitmapInfoHeader->biBitCount<9) //灰度图像
{
// 针对图像每行进行操作
for(j = 0; j < height; j++)
{
for(i = 0; i < wide;i++)
{
lpSrc = (LPBYTE)p_data +wide *j + i;
lpDst = (LPBYTE)temp + wide* j+ wide - i;
*lpDst = *lpSrc;
}
}
memcpy(p_data,temp, wide*height);
}
else //24位彩色
{
wide=this->GetDibWidthBytes();
temp=new BYTE[height*wide];
// 针对图像每行进行操作
for(j = 0; j < height; j++)
{
for(i = 0; i < wide;i=i+3)
{
lpSrc = (LPBYTE)(p_data +wide *j + i);
lpDst = (LPBYTE)temp + wide* j+ wide - i;
*(lpDst) = *lpSrc;
*(lpDst+1) = *(lpSrc+1);
*(lpDst+2) = *(lpSrc+2);
}
}
memcpy(p_data,temp, wide*height);
}
}
else // 垂直镜像
{
if (m_pBitmapInfoHeader->biBitCount<9) //灰度图像
{
// 针对上半图像进行操作
for(i = 0; i < wide;i++)
{
for(j = 0; j < height; j++)
{
lpSrc = (LPBYTE)p_data + wide * j+i;
lpDst = (LPBYTE)temp + wide * (height - j - 1)+i;
*lpDst = *lpSrc;
}
}
memcpy(p_data,temp, wide*height);
}
else //24位彩色
{
wide=this->GetDibWidthBytes();
temp=new BYTE[height*wide];
// 针对上半图像进行操作
for(i = 0; i < wide;i++)
{
for(j = 0; j < height; j++)
{
lpSrc = (LPBYTE)p_data + wide * j+i;
lpDst = (LPBYTE)temp + wide * (height - j - 1)+i;
*lpDst = *lpSrc;
}
}
memcpy(p_data,temp, wide*height);
// 释放内存
delete temp;
}
}
}