图形上下,左右对称旋转代码



/
//图像处理
void CGeoPhotoProc::ReversePicture(CString strPicName)
{
 CImage image;
 if(image.Load(strPicName)==E_FAIL)
  return ;
 //图像每一行的字节数 
 int nRowBytes = image.GetPitch(); 
 int nWidth = image.GetWidth(); 
 int nHeight = image.GetHeight(); 

 //每个像素所占的字节数
 int nClrCount = image.GetBPP() / 8; 
 LPBYTE p;
 //上下对调
 for(int index = 0; index < nClrCount; index++) 
 { 
  LPBYTE pOrg=p = (LPBYTE)image.GetBits(); 
  pOrg += (nHeight-1)*nRowBytes;
  for(int i = 0; i < nHeight/2; i++) 
  {
   for(int j = 0; j < nWidth; j++) 
   {
    BYTE nB=p[j*nClrCount + index]; 
    p[j*nClrCount + index]=pOrg[j*nClrCount + index] ;
    pOrg[j*nClrCount + index] = nB; 
   } 
   //如果nRowBytes>0  则从开始到结尾 
   //如果nRowBytes<0, 则从结尾到开始 
   p += nRowBytes;
   pOrg-=nRowBytes;
  } 
 }

 image.Save(strPicName); 
}

//左右对调
void CGeoPhotoProc::SymmetryPicture(CString strPicName)
{
 CImage image;
 if(image.Load(strPicName)==E_FAIL)
  return ;
 //图像每一行的字节数 
 int nRowBytes = image.GetPitch(); 
 int nWidth = image.GetWidth(); 
 int nHeight = image.GetHeight(); 

 //每个像素所占的字节数
 int nClrCount = image.GetBPP() / 8; 
 LPBYTE p;
 //左右对调
 for(int index = 0; index < nClrCount; index++) 
 { 
  p = (LPBYTE)image.GetBits(); 
  for(int i = 0; i < nHeight; i++) 
  { 
   for(int j = 0; j < nWidth/2; j++) 
   {
    BYTE nB=p[(nWidth-1-j)*nClrCount + index]; 
    p[(nWidth-1-j)*nClrCount + index]=p[j*nClrCount + index] ;
    p[j*nClrCount + index] = nB; 
   } 
   //如果nRowBytes>0  则从开始到结尾 
   //如果nRowBytes<0, 则从结尾到开始 
   p += nRowBytes;  
  } 
 }
 image.Save(strPicName); 
}

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值