封装了一个GDI+的使用类

GdiPluss.h

#pragma once
#include <comdef.h>
#include <gdiplus.h>
using namespace Gdiplus;
#pragma comment(lib, "gdiplus.lib") class CGdiPluss
{
public:
CGdiPluss(void);
~CGdiPluss(void); public:
enum ImageFormat
{
//Jpeg图片格式
Jpeg,
//Png图片格式
Png,
//Bmp图片格式
Bmp,
//Gif图片格式
Gif,
//Tiff图片格式
Tiff
} ; public:
//打开GDI+
void OpenGdiPlus();
//关闭GDI+
void CloseGdiPlus();
//获取Image的格式信息CLSID
//参数:format,image的图片格式(image/png | image/bmp | image/jpeg | image/gif | image/tiff)
//参数:CLSID,保存格式的信息
bool GetEncoderClsid(const WCHAR* format, CLSID* pClsid);
//图片保存
//参数:src,保存的图片
//参数:filename,保存的路径
//参数:format,图片保存的格式
bool SaveImage(Bitmap* src,const WCHAR* filename, ImageFormat format); private:
ULONG_PTR m_gdiplus_token; };

GdiPluss.cpp

#include "GdiPluss.h"

CGdiPluss::CGdiPluss(void)
{
} CGdiPluss::~CGdiPluss(void)
{
} void CGdiPluss::OpenGdiPlus()
{
::GdiplusStartupInput startinput;
::GdiplusStartup(&m_gdiplus_token,&startinput,NULL);
} void CGdiPluss::CloseGdiPlus()
{
::GdiplusShutdown(m_gdiplus_token);
} bool CGdiPluss::GetEncoderClsid(const WCHAR* format, CLSID* pClsid)
{
UINT num, size;
//获取GDI+支持的图像格式编码器种类数以及ImageCodecInfo数组的存放大小
Gdiplus::GetImageEncodersSize(&num, &size);
if(size == )
return false; // Failure
//为ImageCodecInfo数组分配足额空间
Gdiplus::ImageCodecInfo* pImageCodecInfo = (Gdiplus::ImageCodecInfo*)(malloc(size));
//获取所有的图像编码器信息
Gdiplus::GetImageEncoders(num, size, pImageCodecInfo);
bool flag = false;
//查找符合的图像编码器的Clsid
for (UINT ix = ; !flag && ix < num; ++ix)
{
//忽略大小写进行字符串比较
if ( _wcsicmp(pImageCodecInfo[ix].MimeType, format) == )
{
*pClsid = pImageCodecInfo[ix].Clsid;
flag = true;
}
}
free(pImageCodecInfo);
return flag;
} bool CGdiPluss::SaveImage(Bitmap* src,const WCHAR* filename, ImageFormat format)
{
CLSID clsid;
WCHAR* _format;
switch(format)
{
case Jpeg:
_format=L"image/jpeg";
break;
case Png:
_format=L"image/png";
break;
case Bmp:
_format=L"image/bmp";
break;
case Gif:
_format=L"image/gif";
break;
case Tiff:
_format=L"image/tiff";
break;
default:
return false;
break;
}
if(!GetEncoderClsid(_format,&clsid))
return false;
src->Save(filename,&clsid);
return true;
}

使用很简单:

::CGdiPluss m_gdi;

开启

m_gdi.OpenGdiPlus();

关闭
m_gdi.CloseGdiPlus();

C++ GDI+调用的更多相关文章

  1. GDI+ 笔记

    1.GDI+模板 #include<windows.h> #include<GdiPlus.h> #include <time.h> #include <ma ...

  2. VC一些经验系列: 《分享泄漏检测工具:内存、DC、GDI、Handle... 》

    分享下自己工作中用到的一些用于泄漏检测的工具 后面的是DC的一些定义和注意事项.(不喜勿看) //=================================================== ...

  3. GDI+ —— Tcanvas 类属性及方法.......

    delphi TCanvas类 类关系   TObject-> TPersistent   对那些作图对象,可使用TCanvas对象作为画布.标准的window控件,例如编辑控件和列表框控件,当 ...

  4. 第18章 图元文件_18.1 老式图元文件格式(wmf)

    18.1 老式图元文件格式(wmf) (1)创建图元文件:HDC hdcMeta = CreateMetaFile(lpszFile); ①如果lpszFile为NULL则图元文件存储在内存中,如果指 ...

  5. DWM 窗体玻璃效果实现

    我一直盼望着 Windows 新版本的发布.令人感兴趣的事情莫过于浏览 MSDN® 和 SDK 文档,查找一些可以利用和依赖的最新创新,然后让朋友和同事以及您的老板(如果幸运的话)大开眼界.Windo ...

  6. DELPHI下API简述(1800个API)

    DELPHI下API简述 http://zero.cnbct.org/show.asp?id=144 auxGetDevCaps API 获取附属设备容量 auxGetNumDevs API 返回附属 ...

  7. Windows API 函数浏览

    AbortDoc                                          终止一项打印作业                        是         是        ...

  8. Delphi常用API,API函数

    auxGetDevCaps API 获取附属设备容量 auxGetNumDevs API 返回附属设备数量 auxGetVolume API 获取当前卷设置 auxOutMessage API 向输出 ...

  9. 【转】DWM 窗体玻璃效果实现

    我一直盼望着 Windows 新版本的发布.令人感兴趣的事情莫过于浏览 MSDN® 和 SDK 文档,查找一些可以利用和依赖的最新创新,然后让朋友和同事以及您的老板(如果幸运的话)大开眼界.Windo ...

随机推荐

  1. Ibatis基础知识:#与$的差别

    背景 Ibatis是一个轻量级.非侵入式的持久层框架,适用于范围较广.较轻便--当然,不管J2EE中哪一个持久层框架,都会基于JDBC(不细究JNDI方式).我们在SqlMap中编写SQL,利用各种S ...

  2. 多进程对 MySQL update的影响

    今天要做数据清洗的时候,要更新一个数据库字段,考虑到用多进程去更新数据库,也许程序会跑得快一些,结果开了64个进程, 结果是其他程序更新的时候,速度非常慢,最后发现的原因是,数据库中有64个SQL语句 ...

  3. 不能与abstruct共同修饰方法的关键字

    一 抽象类:动态方法至少有一个是抽象方法. 其中abstruct关键字修饰的方法不能与哪些关键字共同修饰? 1private 因为private修饰的方法在子类中是隐藏的.不可见的.而abstruct ...

  4. Android开发7——android.database.CursorIndexOutOfBoundsException:Index -1 requested

    android中数据库处理使用cursor时,游标不是放在为0的下标,而是放在为-1的下标处开始的. 也就是说返回给cursor查询结果时,不能够马上从cursor中提取值. 下面的代码会返回错误Us ...

  5. ui-router路由控制器(一)

    angularUI 在不断发展过程中已经被划分成了几个模块,你可以选择你需要的模块载入,我们今天要了解一下路由控制器 ui-router ,它就是angularUI划分出出来的一个独立模块. 此模块只 ...

  6. 斯坦福IOS开发第五课(第二部分)

    转载请注明出处 http://blog.csdn.net/pony_maggie/article/details/27845257 作者:小马 五 代码演示样例 上面讲到的知识点在这个演示样例都有涉及 ...

  7. [Mongodb] 借mongodb被入侵勒索事件,谈下Linux服务器端口安全问题

    一.缘由: 最近几天Mongodb勒索事件甚嚣尘上:由于对外网开放访问并且没有开启授权机制被删库.远程拖库.勒索.接着又曝出Elasticsearch被勒索事件,缘由一样,Elasticsearch服 ...

  8. SourceInsight-显示文件完整路径

    使用Source insight的时候想看文件的全路径,但是默认的是中间省略的路径,所以可以通过: 1.Options-->Preferences-->Display 设置Trim lon ...

  9. configure new Linux/Mac

    vim   http://www.cnblogs.com/wswang/p/5088078.html sublime   http://jingyan.baidu.com/article/3aed63 ...

  10. 注解Annotation的IoC:从@Autowired到@Component

    注解Annotation的IoC:从@Autowired到@Component 2017-01-23 目录 1 什么是注解2 不使用注解示例  2.1 com.springioc.animal.Mon ...