C++ GDI+调用
2024-09-24 11:10:47
封装了一个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();
最新文章
- Android中的AlertDialog使用示例四(多项选择确定对话框)
- difference bewteen *args and **args in python?
- SQLServer 事务隔离级别与锁的申请和释放
- 【微信Java开发 --番外篇】错误解析
- 看上去很美 国内CDN现状与美国对比
- 原生javascript模仿win8等待进度条。
- [转]UINavigationController 返回的方法汇总
- selenium简单代码入门
- MFC可编辑的ListCtrl
- 如何自定义echarts主题
- bzoj4028: [HEOI2015]公约数数列
- (原)ubuntu上安装Torch7及nn及dpnn
- 由 “无法使用从远程表选择的&#160;lob&#160;定位符” 错误而引导出来的一系列问题解决方案
- Python全栈学习_作业集锦(持续更新)
- CMake set 语法
- 利用MySQL游标进行计算排名
- 将json转换为数据结构体
- vsftpd上传文件出现553 Could not create file错误解决方法
- Linux下SVN配置hook经验总结
- 记一款bug管理系统(bugdone.cn)的开发过程(3) - 永久免费化
热门文章
- 关于JavaScript中name的意义冲突
- C++11新特性(1) 右值引用
- 目的可疑,但方法非常值得学习的书——leo鉴书56
- GO1.6语言学习笔记3-工具篇(SublimeText 3+GoSublime组合)
- Python rjust() 方法
- Linux操作系统CentOS7.2发行版本的安装与配置(安装是选择服务器类型)
- k8s的容器监测探针
- for循环中的break与continue
- 链队列的C++实现
- canvas.drawBitmap(bitmap, src, dst, paint)