首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

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

2013-08-09 
GDI+如何将多张PNG图片合成一张并且保存GDI+如何将多张PNG图片合成一张并且保存网上找了很多。都是在onpain

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   
}

热点排行