Cimage图像拷贝

  1. bool COriViewDlg::ImageCopy(const CImage &srcImage, CImage &destImage)  
  2. {  
  3.     int i,j;//循环变量  
  4.     if(srcImage.IsNull())  
  5.         return FALSE;  
  6.     //源图像参数  
  7.     BYTE* srcPtr=(BYTE*)srcImage.GetBits();  
  8.     int srcBitsCount=srcImage.GetBPP();  
  9.     int srcWidth=srcImage.GetWidth();  
  10.     int srcHeight=srcImage.GetHeight();  
  11.     int srcPitch=srcImage.GetPitch();   
  12.     //销毁原有图像  
  13.     if( !destImage.IsNull())  
  14.     {  
  15.         destImage.Destroy();  
  16.     }  
  17.     //创建新图像  
  18.     if(srcBitsCount==32)   //支持alpha通道  
  19.     {  
  20.         destImage.Create(srcWidth,srcHeight,srcBitsCount,1);  
  21.     }  
  22.     else  
  23.     {  
  24.         destImage.Create(srcWidth,srcHeight,srcBitsCount,0);  
  25.     }  
  26.     //加载调色板  
  27.     if(srcBitsCount<=8&&srcImage.IsIndexed())//需要调色板  
  28.     {  
  29.         RGBQUAD pal[256];  
  30.         int nColors=srcImage.GetMaxColorTableEntries();  
  31.         if(nColors>0)  
  32.         {       
  33.             srcImage.GetColorTable(0,nColors,pal);  
  34.             destImage.SetColorTable(0,nColors,pal);//复制调色板程序  
  35.         }     
  36.     }   
  37.     //目标图像参数  
  38.     BYTE *destPtr=(BYTE*)destImage.GetBits();  
  39.     int destPitch=destImage.GetPitch();  
  40.     //复制图像数据  
  41.     for(i=0 ; i<srcHeight;i++)  
  42.     {  
  43.         memcpy( destPtr+i*destPitch, srcPtr+i*srcPitch, abs(srcPitch) );  
  44.     }   
  45.   
  46.     return TRUE;  

猜你喜欢

转载自blog.csdn.net/qq_36576377/article/details/79597394