以文本方式查看主题 - 计算机科学论坛 (http://bbs.xml.org.cn/index.asp) -- 『 C/C++编程思想 』 (http://bbs.xml.org.cn/list.asp?boardid=61) ---- 如何在VC++中实现Gdi与jpg图片的合并? (http://bbs.xml.org.cn/dispbbs.asp?boardid=61&rootid=&id=88561) |
-- 作者:葛靖青001 -- 发布时间:12/7/2010 3:16:00 PM -- 如何在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<nNum; i++) { if (wcscmp(pCodecInfo[i].MimeType,format)==0) { *pClsid = pCodecInfo[i].Clsid; 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, { 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"); 有了上面的功能,其他的就没问题了 |
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
191.406ms |