星期二, 11月 16, 2010

[MFC] CImage的簡單複製方法 (Copy CImage)

BOOL ImageCopy(const CImage &srcImage, CImage &destImage)
{
 int i,j;//循環變量
 if(srcImage.IsNull())
 return FALSE;
 //原始影像參數
 BYTE* srcPtr=(BYTE*)srcImage.GetBits();
 int srcBitsCount=srcImage.GetBPP();
 int srcWidth=srcImage.GetWidth();
 int srcHeight=srcImage.GetHeight();
 int srcPitch=srcImage.GetPitch(); 
 //銷毀原有圖像

 if( !destImage.IsNull())
 {
  destImage.Destroy();
 }
 //創建新圖像
 if(srcBitsCount==32)   //支援alpha通道
 {
  destImage.Create(srcWidth,srcHeight,srcBitsCount,1);

 }
 else
 {
  destImage.Create(srcWidth,srcHeight,srcBitsCount,0);
 }



 //加載調色板
 if(srcBitsCount<=8&&srcImage.IsIndexed())//需要調色盤
 {
  RGBQUAD pal[256];
  int nColors=srcImage.GetMaxColorTableEntries();
  if(nColors>0)
  {
   srcImage.GetColorTable(0,nColors,pal);
   destImage.SetColorTable(0,nColors,pal);//複製調色盤
  } 
 } 

 //目標影像參數
 BYTE *destPtr=(BYTE*)destImage.GetBits();
 int destPitch=destImage.GetPitch();
 //複製影像數據

 for(i=0 ; i<srcHeight;i++)
 {
  memcpy( destPtr+i*destPitch, srcPtr+i*srcPitch, abs(srcPitch) );
 } 
 return TRUE;
}

沒有留言: