奇趣技术网 收藏本站
设为主页
商务合作
首页 新闻中心 行业动态 软件新闻 安全资讯 病毒预警 漏洞发布 操作系统 Dos Win9x Win2000 WinXP Win2003 WinVista Linux Unix
数据库 DB2 Access MSSQL MySQL Oracle Sybase 编程技术 ASP PHP JSP CGI/Perl XML .Net C/C++/C# VB VC Delphi Java 汇编
安全技术 安全教学 工具介绍 漏洞利用 病毒防范 入侵检测 防火墙 安全防范 汉化破解 攻击实例 加密解密 技术论坛
中华网络安全联盟 >> 程序开发 >> VC >> VC中使用Gdi+合并jpg图片
程序开发
Asp
PHP
JSP
CGI/Perl
XML
.Net
C/C++/C#
Visual Basic
Visual C++
Delphi
Java
汇编语言
  • VC中利用多线程技术实

  • 利用OpenGL实现三维绘

  • 基于Visual C++的Wins

  • 基于Visual C++6.0的D

  • Visual C++ MFC 中常用

  • 在MFC下如何定义全局变

  • 使用MFC在应用程序中嵌

  • VC++中进程与多进程管

  • VC中使用Gdi+合并jpg图片
    字体:

    中华网络安全联盟    作者:佚名    来源:网络转载    时间:2006-3-22

    合并两张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;
       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");

    有了上面的功能,其他的就没问题了

    字体:
     
    设为主页 收藏本站 联系我们 友情连接 商务合作 网友留言
    Copyright©2006-2008 中华网络安全联盟 All rights reserved.