cximage 进行gif 背景透明处理

         之前利用GDI+实现图片背景透明处理,发现在XP下无效,后来经过研究,用CXimage实现了透明处理的过程,代码不仅精简了很多,而且在XP下同样有效。

        通过学习CXIMAGE的demo,自己实现了gif背景透明的处理过程,代码如下:

CxImage image((BYTE*)ssImageSource.c_str(), ssImageSource.length(),CXIMAGE_FORMAT_GIF);

if (image.IsValid()) 
{
  RGBQUAD c = {255, 255, 255, 0};
  if (image.GetTransIndex() != 24)
  {
  image.IncreaseBpp(24);
  }
  image.SetTransIndex(0);
  RGBQUAD rgbTrans = {255, 255, 255, 0};
  image.SetTransColor(rgbTrans);
 
  CQuantizer q(16,8);
  q.ProcessImage(image.GetDIB());
  ppal=(RGBQUAD*)calloc(16*sizeof(RGBQUAD),1);
  q.SetColorTable(ppal);
  
  image.DecreaseBpp(4,false,ppal,16);
  
  if (!image.AlphaPaletteIsValid()) 
{
image.AlphaPaletteEnable(0);
}
  image.SetTransIndex(image.GetNearestIndex(c));
  
  if (ppal) free(ppal);
  image.SetProgress(100);

//image.Save("pic2.gif",CXIMAGE_FORMAT_GIF);
}
long picBuffSize=0;//得到图像大小
BYTE* picBuff=NULL;//存储图像数据的缓冲
image.Encode(picBuff,picBuffSize,CXIMAGE_FORMAT_GIF);


经过实践证明,CXimage确实很强大。

你可能感兴趣的:(cximage 进行gif 背景透明处理)