之前利用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确实很强大。