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

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

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

【 tulaoshi.com - 编程语言 】

合并两张jpg图片为一张jpg图片,思路是先把两张图片jpg图片都转化成bmp图片,然后把两张bmp图片合并成一张bmp图片,然后是把这张bmp图片转化为jpg图片。

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

一。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;

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

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

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

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

来源:http://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...
前几天没事,写了一个小程序,可以用于学习C#。 程序使用了VS.NET环境编译,你的机器只要安装了.NET Framework SDK就可以运行。 源码和执行文件可以下载 http://www.wh-adv.com/download/five.zip 你不想下载也可读一下源码(图片资源等需要下载)。 namespace Leimom.FiveChess { using System; using System.Drawing; using Syst...
最终效果图 1、首先索套工具套取精灵王子的脸部。 2、然后把王子图层的不透明度调成50%,CTRL+T调整大小,要和美女的五官对称。 3、CTRL+王子图层使之浮起,点图3中红圈部分,给王Tulaoshi.com子层建立“蒙板”。选画笔工具,这时要把前、后景色设置为黑色。用画笔工具檫掉边缘多余的部分。这里要注意的是,修边的时候...
MySQL的ODBC接口实现是通过安装MyODBC驱动,这个驱动程序是跨平台的。如果在Linux等unix体系操作系统下使用,需要先安装iodbc这些第三方ODBC标准支援平台。  简单的ASP示例代码:  %  dim sql,mysql  set sql = server.createobject("adodb.connection")  mysql="driver={mysql odbc&nb...

经验教程

252

收藏

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