读书人

GDI+怎么将多张PNG图片合成一张并且保

发布时间: 2013-08-09 15:16:24 作者: rapoo

GDI+如何将多张PNG图片合成一张并且保存
GDI+如何将多张PNG图片合成一张并且保存

网上找了很多。都是在onpaint里面去做,好奇怪啊。还一定需要上下文设备。。。搞不懂GDI+的代码怎么都写的那么依赖上下文设备

也不太复杂个功能。思路都明白。就是不会写。哎,厚着脸要现成的代码了。惭愧!!!
[解决办法]
可以不依赖任何上下文设备
//创建一个位图,用来保存合成后的图像
Gdiplus::Bitmap* pBitmap=new Bitmap(合成后宽度,合成后高度,PixelFormat32bppARGB);
Gdiplus::Graphics g(pBitmap);

Gdiplus::Bitmap tmp1(L"c:\\001.png");//载入你要合并的PNG
g.DrawImage(&tmp1,.....);

Gdiplus::Bitmap tmp2(L"c:\\002.png");//载入你要合并的PNG
g.DrawImage(&tmp2,.....);

pBitmap->Save(....);//保存合并后的图像,完工!
[解决办法]

引用:
保存的图像打开了之后显示没有预览。引用的CLSID值是CCCCCCC-CCC这样的。请问是为什么啊


CLSID encoderClsid;     
EncoderParameters encoderParameters;
int quality = 100; // jpeg图象质量
encoderParameters.Count = 1;
encoderParameters.Parameter[0].Guid = EncoderQuality;
encoderParameters.Parameter[0].Type = EncoderParameterValueTypeLong;
encoderParameters.Parameter[0].NumberOfValues = 1;
encoderParameters.Parameter[0].Value = &quality;
if(strExt==_T("jpg")){
GetEncoderClsid(L"image/jpeg", &encoderClsid);
}else if(strExt==_T("gif")){
GetEncoderClsid(L"image/gif", &encoderClsid);
}else if(strExt==_T("png")){
GetEncoderClsid(L"image/png", &encoderClsid);
}else if(strExt==_T("bmp")){
GetEncoderClsid(L"image/bmp", &encoderClsid);
}

pBitmap->Save(strFileName, &encoderClsid, &encoderParameters);

int GetEncoderClsid(LPCWSTR format, CLSID* pClsid)


{
UINT num = 0; // number of image encoders
UINT size = 0; // size of the image encoder array in bytes
ImageCodecInfo* pImageCodecInfo = NULL;
GetImageEncodersSize(&num, &size);
if(size == 0)
return -1; // Failure

pImageCodecInfo = (ImageCodecInfo*)(malloc(size));
if(pImageCodecInfo == NULL)
return -1; // Failure

GetImageEncoders(num, size, pImageCodecInfo);
for(UINT j = 0; j < num; ++j)
{
if( wcscmp(pImageCodecInfo[j].MimeType, format) == 0 )
{
*pClsid = pImageCodecInfo[j].Clsid;
free(pImageCodecInfo);
return j; // Success
}
}
free(pImageCodecInfo);
return -1; // Failure
}

读书人网 >VC/MFC

热点推荐