求图像翻转算法(非旋转) 最好是能以对称轴实现任意角度翻转 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 贴个水平/垂直翻转code:///***************************************************************/ /*函数名称: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; } }} vc6.0支持越南语么? 如果 我想开发淘宝应用方面的vc程序 弱弱的问一下,用ATL做好的控件,一般用什么手段来测试? 深圳VC兼职 关于MFC制做ActiveX方面的问题? 各位大哥帮助!为什么会出现必须先telnet服务器端口,客户端socket才能连接成功的情况? 如何调节系统的音量? 关于控制台程序的图形问题 ocx中如何实现将打印预览作为主窗口? 到里是我错了,还是盖次的错:我将win2000的几个共享文件夹限制了用户数,当十多台工作站访问时,打不开文件! [求助]完成端口,10053错误。 如果发送方速度大于接收方就会有这个错误 sql2005 导出数据库出错,想知道怎么解决
/*函数名称: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;
}
}
}