VC采用GDI+合成JPEG图片的方法

2016-02-19 20:11 86 1 收藏

有一种朋友不在生活里,却在生命力;有一种陪伴不在身边,却在心间。图老师即在大家的生活中又在身边。这么贴心的服务你感受到了吗?话不多说下面就和大家分享VC采用GDI+合成JPEG图片的方法吧。

【 tulaoshi.com - 编程语言 】

合并两张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 (nSize0)
{
  return nRet;
}
pCodecInfo = new ImageCodecInfo[nSize];
if (pCodecInfo==NULL)
{
  return nRet;
}
GetImageEncoders(nNum,nSize,pCodecInfo);
for (UINT i=0; inNum; i++)
{
  if (wcscmp(pCodecInfo[i].MimeType,format)==0)
  {
   *pClsid = pCodecInfo[i].Clsid;
   nRet = i;

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

   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");

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

有了上面的功能,其他的就没问题了,如果使用VC6.0,则需要添加相应的h, cpp文件以及LIB文件到相应的目录下,当然GDI+的初始化以及销毁工作也是必不可少的,另外LIB是需要在程序中LINK一下的。

来源:https://www.tulaoshi.com/n/20160219/1622952.html

延伸阅读
标签: vb
这个程序实现了以下的功能:将BMP、JPG、jpeg、GIF、.png、.tiff文件转化成ico文件,可以对转化后的文件进行编辑;创建并编辑一个新的ico文件;对已有的ico文件进行编辑。所有被编辑的文件都保存为ico文件,可以在任何可使用ico文件的地方使用它们。 我先说明一下什么是GDI+。GDI+ 是GDI(Windows 早期版本提供的图形设备接口)的...
一、 基础 GDI的绘图函数基本上都是有状态的,所有的函数都要求一个HDC类型的句柄。这个HDC的获得有几个途径BeginPaint,GetWindowDC, GetDC.他们的参数都只需要一个HWND就差不多了。记得调用了BeginPaint后要调用EndPaint进行清理,调用GetWindowDC和GetDC后要调ReleaseDC进行清理。在MFC代码中常常遇到的CDC CPaintDC CWindowDC CClientD...
标签: 电脑入门
    收到情报,有一个JPEG图片病毒,只要看网上的图片,就会中毒(以后谁还敢看网上PLMM的照片呀,呵呵)!它利用了Windows 操作系统中的漏洞(Gdiplus.dll文件)来进行攻击,中毒后你的网络游戏密码、QQ账号、个人银行密码等关键信息就有可能泄露,是不是很可怕? 第一招:专杀工具彻底清毒 首先到http://db.kingsoft.com/do...
最终效果图 1、首先索套工具套取精灵王子的脸部。 2、然后把王子图层的不透明度调成50%,CTRL+T调整大小,要和美女的五官对称。 3、CTRL+王子图层使之浮起,点图3中红圈部分,给王Tulaoshi.com子层建立“蒙板”。选画笔工具,这时要把前、后景色设置为黑色。用画笔工具檫掉边缘多余的部分。这里要注意的是,修边的时候...
标签: 孕期
孕期采用什么方法保护牙齿 我们常说牙疼不是病,疼起来要人命,可见口腔健康是多么的重要。孕育生命,对于每一位女性来说,都是一件非常神圣而又让人异常兴奋的事情。怀孕后,由于内分泌发生变化,可能会导致牙龈血管扩张,抵抗力减弱。牙槽骨也会因此骨质疏松,准妈妈如果不能很好地保持口腔卫生,牙齿就会面临各种...

经验教程

375

收藏

62
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部