VC实现图片的合并
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VC中使用Gdi+合并jpg图片
合并两张jpg图片为一张jpg图片,思路是先把两张图片jpg图片都转化成bmp图片,然后把两张bmp 图片合并成一张bmp图片,然后是把这张bmp图片转化为jpg图片。
一。jpg,bmp互相转化
/*********************************
format:bmp转为jpg,format为image/jpeg,jpg转为bmp,format为image/bmp
strDst为最终转化结果的图片路径
strSrc为原来图片的路径
**********************************/
BOOL ConvertPic(const WCHAR *format, const CString &strDst, const CString &strSrc) {
BOOL bConvert = false;
CLSID clsid;
int nRet = 0;
nRet = GetEncoderClsid(format,&clsid); //得到CLSID
USES_CONVERSION;
if (nRet>=0)
{
Image image(A2W(strSrc));
image.Save(A2W(strDst),&clsid,NULL);
bConvert = true;
}
return bConvert;
}
其中GetEncoderClsid函数如下:
/*****************************************************
返回值为-1表示失败,其他为成功
******************************************************/
int GetEncoderClsid(const WCHAR *format, CLSID *pClsid)
{
int nRet = -1;
ImageCodecInfo * pCodecInfo = NULL;
UINT nNum = 0,nSize = 0;
GetImageEncodersSize(&nNum,&nSize);
if (nSize<0)
{
return nRet;
}
pCodecInfo = new ImageCodecInfo[nSize];
if (pCodecInfo==NULL)
{
return nRet;
}
GetImageEncoders(nNum,nSize,pCodecInfo);
for (UINT i=0; i { if (wcscmp(pCodecInfo[i].MimeType,format)==0) { *pClsid = pCodecInfo[i].Clsid; nRet = i; delete[] pCodecInfo; return nRet; } else { continue; } } delete[] pCodecInfo; return nRet; } bmp转化为jpg ConvertPic(L"image/jpeg","c:1.jpg","c:1.bmp") jpg转化为bmp ConvertPic(L"image/bmp","c:1.bmp","c:1.jpg") 二。bmp图片合并 BOOL CombinePic(const WCHAR *format, const CString &strDst, const CString &strPic1, const CString &strPic2) { BOOL bCombine = false; int nRet = 0; CLSID clsid; nRet = GetEncoderClsid(format,&clsid); if (nRet>=0) { USES_CONVERSION; Bitmap bmp1(A2W(strPic1)); Bitmap bmp2(A2W(strPic2)); int nWidth = 0, nHeight = 0; nWidth = bmp1.GetWidth(); //假设两图片大小同 nHeight = bmp1.GetHeight(); Bitmap bmpCombine(2*nWidth,nHeight); //高不变,宽*2,水平合并 Graphics * pG = NULL; pG = Graphics::FromImage(&bmpCombine); if (pG!=NULL) { pG->DrawImage(&bmp1,0,0); pG->DrawImage(&bmp2,nWidth,0); bmpCombine.Save(A2W(strDst),&clsid,NULL); } } return bCombine; } 例子: CombinePic(L"image/bmp","12.bmp","1.bmp","2.bmp"); 有了上面的功能,其他的就没问题了。