C++ GDI+调用
封装了一个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+调用的更多相关文章
- GDI+ 笔记
1.GDI+模板 #include<windows.h> #include<GdiPlus.h> #include <time.h> #include <ma ...
- VC一些经验系列: 《分享泄漏检测工具:内存、DC、GDI、Handle... 》
分享下自己工作中用到的一些用于泄漏检测的工具 后面的是DC的一些定义和注意事项.(不喜勿看) //=================================================== ...
- GDI+ —— Tcanvas 类属性及方法.......
delphi TCanvas类 类关系 TObject-> TPersistent 对那些作图对象,可使用TCanvas对象作为画布.标准的window控件,例如编辑控件和列表框控件,当 ...
- 第18章 图元文件_18.1 老式图元文件格式(wmf)
18.1 老式图元文件格式(wmf) (1)创建图元文件:HDC hdcMeta = CreateMetaFile(lpszFile); ①如果lpszFile为NULL则图元文件存储在内存中,如果指 ...
- DWM 窗体玻璃效果实现
我一直盼望着 Windows 新版本的发布.令人感兴趣的事情莫过于浏览 MSDN® 和 SDK 文档,查找一些可以利用和依赖的最新创新,然后让朋友和同事以及您的老板(如果幸运的话)大开眼界.Windo ...
- DELPHI下API简述(1800个API)
DELPHI下API简述 http://zero.cnbct.org/show.asp?id=144 auxGetDevCaps API 获取附属设备容量 auxGetNumDevs API 返回附属 ...
- Windows API 函数浏览
AbortDoc 终止一项打印作业 是 是 ...
- Delphi常用API,API函数
auxGetDevCaps API 获取附属设备容量 auxGetNumDevs API 返回附属设备数量 auxGetVolume API 获取当前卷设置 auxOutMessage API 向输出 ...
- 【转】DWM 窗体玻璃效果实现
我一直盼望着 Windows 新版本的发布.令人感兴趣的事情莫过于浏览 MSDN® 和 SDK 文档,查找一些可以利用和依赖的最新创新,然后让朋友和同事以及您的老板(如果幸运的话)大开眼界.Windo ...
随机推荐
- Facade - 外观模式
1. 概述 外观模式,我们通过外观的包装,使应用程序只能看到外观对象,而不会看到具体的细节对象,这样无疑会降低应用程序的复杂度,并且提高了程序的可维护性.例子1:一个电源总开关可以控制四盏灯.一个风扇 ...
- C# list介绍
一.LIST概述 所属命名空间:System.Collections.Generic public class List<T> : IList<T>, ICollec ...
- Python UNICODE GBK UTF-8 之间相互转换
Python 编码格式检测,可以使用 chardet , 例如: import urllib rawdata = urllib.urlopen('http://www.google.cn/').rea ...
- jenkins 执行远程linux命令
在Jenkins中进行构建时,可能需要首先SSH登录到一个远程服务器以执行必要的脚本,然后再执行构建.这时,需要安装SSH Plugin,并进行如下配置.1.在Jenkins界面,系统管理->管 ...
- particleDesigner2 positionType按钮
在particleDesigner2中positionType对应的设置是:
- cocos2dx实现3d拾取注意事项
用的是cocos2dx 3.x,如果是真机测试,glview = cocos2d::GLViewImpl::createWithRect(...)和glview->setDesignResolu ...
- Memcached安装使用和源代码调试
memcached官网:http://memcached.org/ 一.安装 下载 # wget http://www.memcached.org/files/memcached-1.4.25.tar ...
- php教程之php空白页的原因及解决方法
php中出现空白页的原因及解决方法汇总. 很多程序员在进行php开发的时候都遇到过出现空白页的请,综合分析来说,在php编程中出现空白页面可能是由以下几个原因造成的: 1.逻辑错误逻辑错误是最难排除的 ...
- zookeeper 安装 配置集群
https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/ [root@znode01 src]# tar -xzvf zookeeper--alph ...
- 【转】Oozie4.2.0配置安装实战
什么是Oozie? Oozie是一种Java Web应用程序,它运行在Java servlet容器——即Tomcat——中,并使用数据库来存储以下内容: 工作流定义 当前运行的工作流实例,包括实例的状 ...