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 ...
随机推荐
- Python isupper() 方法
描述 Python isupper() 方法检测字符串中所有的字母是否都为大写. 相反的方法:islower() 方法. 语法 isupper() 方法语法: S.isupper() 参数 无. 返回 ...
- ios app 实现热更新(无需发新版本号实现app加入新功能)
眼下可以实现热更新的方法,总结起来有下面三种 1. 使用FaceBook 的开源框架 reactive native,使用js写原生的ios应用 ios app能够在执行时从server拉取最新的js ...
- texturePacker黄色文件夹和蓝色文件夹
texturePacker中以黄色文件夹添进来的文件夹中的图片,不用带文件夹名,以蓝色文件夹添进来的文件要带文件夹名.
- cocos2dx 3.3多相机下_transformUpdated bug
uint32_t Node::processParentFlags(const Mat4& parentTransform, uint32_t parentFlags) { if(_using ...
- window 2008 定时任务调用bat不成功的解决方法
之前一直有在一台XP的机器上调用定时任务.如今这台机器换成了window 2008的操作系统,调用一直不成功.只是在偶然之间攻克了. 选择"任务计划程序" 任务计划程序库 ...
- Lua脚本语言快速入门手册
学了两天Lua语言,感叹其短小精悍,上手极快,语法还很舒服,不错!整理下学习过程中经常用到的基础知识,共勉! Lua用法简述 Lua语言是在1993年由巴西一个大学研究小组发明,其设计目标是作为嵌入式 ...
- 关于UI测试
分为UI逻辑测试和UI显示测试两部分.要根据不同的面板状态进行测试 状态 -UI逻辑 -显示测试 一般优先做UI逻辑测试,后做显示测试.因为显示内容要经常变动,而且看的始终比代码测的准.去测显示测试会 ...
- paip.分布式应用系统java c#.net php的建设方案
paip.分布式应用系统java c#.net php的建设方案 1. 基础设施的建立 1 2. 本地的的调用API 1 3. 数据的传输 1 4. 代码的传输 1 5. 代码的自动热编译 2 6. ...
- ORACLE 新增记录 & 更新记录
开发中偶尔需要新增一条记录或修改一条记录的几个字段,语法中有微妙的区别. 由于不是经常写,久不写就忘记了,而又要重新查找或调试. 新增记录语法: --新增记录(仿照已有表记录)INSERT INTO ...
- HBase性能优化方法总结(二):写表操作
转自:http://www.cnblogs.com/panfeng412/archive/2012/03/08/hbase-performance-tuning-section2.html 本文主要是 ...