封装了一个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. web项目,美工和前台配合,页面路径访问问题

    一.美工写页面使用相对路径,但后台使用项目的应用绝对路径,访问时会出现404或页面乱码的问题 目前的解决方法:在页面中添加base标签,指定当前页面默认的路径 base标签:为页面上的所有链接规定默认 ...

  2. jenkins构建自动执行jmeter 发送http请求,中间有替换参数路径

    #在构建目录下创建jmeter目录,在这个目录下面执行jmeter性能测试mkdir -p $WORKSPACE/target/apache-jmeter-3.1/#复制jmeter文件到执行测试目录 ...

  3. unity5 where is "Edit->Render Settings"?

    The Render Settings logic has changed a bit. To find the settings you will need to go to "Windo ...

  4. 使用配置hadoop中常用的Linux(ubuntu)命令

    生成key: $ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa $ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized ...

  5. Windows Store Apps 开发转载

    懒得写了,就直接记录转载一下文章地址吧. 如何为应用定义全局默认字体:http://blogs.msdn.com/b/gautamdh/archive/2014/03/16/how-to-change ...

  6. 第一个Verilog程序:通用加法器

    Verilog作为一门硬件描述语言,快速掌握它的方法就是不断的练习,反复动手实践,通过例子掌握隐藏在语句背后的硬件电路.下面是第一个需要学习的Verilog例子: )( :] a, :] b, inp ...

  7. js压缩图片并上传,不失真,保证图片清晰度

    <!DOCTYPE HTML> <html lang="zh-CN"> <head> <meta charset="UTF-8& ...

  8. Web攻防系列教程之文件上传攻防解析(转载)

    Web攻防系列教程之文件上传攻防解析: 文件上传是WEB应用很常见的一种功能,本身是一项正常的业务需求,不存在什么问题.但如果在上传时没有对文件进行正确处理,则很可能会发生安全问题.本文将对文件上传的 ...

  9. QQ自动发送+@好友功能+tencent://功能

    1.取出全部标题 D2007版本 procedure TForm1.Button1Click(Sender: TObject);var  hCurrentWindow:HWnd;  szText: a ...

  10. addEventListener()绑定事件的对象方法。

    addEventListener()绑定事件的对象方法.addEventListener()含有三个参数,一个是事件名称,另一个是事件执行的函数,最后一个是事件捕获,, obj.addEventLis ...