c++ 使用gdiplus

49 篇文章 2 订阅

在要使用的工程中,增加如下代码
 #include  < comdef.h >     // 初始化一下com口

 // 在GDI+中,需要定义一个ULONG_PTR。
 #ifndef ULONG_PTR  
 #define  ULONG_PTR unsigned long*
 #endif

 // 通过typedef定义的。与上面的宏定义的作用效果是一样的。这两个,任意一种方法都可以。其他的能达到同样效果的方法也一样。
 #if  defined(_WIN64)
typedef unsigned __int64 ULONG_PTR;
 #else
typedef unsigned  long  ULONG_PTR;
 #endif

#include  " GdiPlus.h "            // 包含DGI+的头文件。

 // 使用Gdiplus名字空间,可选,不用的话,相关的地方加上[ Gdiplus :: ] 也一样。
 using   namespace  Gdiplus;  
上面的代码添加在需要的地方即可,一般可以写在StdAfx.h中。

 


 
1.     加载lib。
#pragma comment( lib, "gdiplus.lib" )
上面的代码,或者在项目的设置里增加引入的lib文件,都可以。
 
2.     初始化GDI+环境
GdiplusStartup( &m_pGdiToken , &m_gdiplusStartupInput , NULL );
下面的两个变量,是初始化GDI+环境必须的,只要作用范围与GDI+的环境作用范围一致就可以了。在卸载GDI+环境的时候,还要用到。
GdiplusStartupInput m_gdiplusStartupInput;
ULONG_PTR m_pGdiToken;
 
3.     卸载GDI+环境
GdiplusShutdown(m_pGdiToken);
在确定不使用GDI+的时候,写上上面一句代码即可。
 

 

假设是用的MFC架构:


1. 添加头文件和依赖库:

stdafx.h中添加:

#include <gdiplus.h>
using namespace Gdiplus;
#pragma comment(lib, "gdiplus.lib")

2. CWinApp中添加初始化:

APP类中添加成员变量:ULONG_PTR m_gdiplusToken;

在APP类的InitInstance()开头添加:(必须在开头部分)

Gdiplus::GdiplusStartupInput gdiplusStartupInput;
Gdiplus::GdiplusStartup(&m_gdiplusToken, &gdiplusStartupInput, NULL);

APP类中重写ExitInstance(),并添加:
Gdiplus::GdiplusShutdown(m_gdiplusToken);
 

 

【GDI+与GDI】 -- 都是硬件加速的

1. GDI+是GDI的下一个版本,它进行了很好的改进,并且易用性更好。

GDI的一个好处就是你不必知道任何关于数据怎样在设备上渲染的细节,GDI+更好的实现了这个优点,

也就是说,GDI是一个中低层API,你还可能要知道设备,而GDI+是一个高层的API,你不必知道设备。

2. GDI是有状态的,而GDI+是无状态的。

3. GDI绘图要使用设备环境(DC)和句柄(Handle);而GDI+全部交由Graphics类管理。

4. GDI绘图时可以使用SelectObject频繁切换图形对象,而GDI+的图形对象是独立的。

5. GDI中存在一个“当前位置”(全局区),目的是提高绘图性能;而GDI+取消了它,以避免绘图时不确定这个“当前位置”而带来非预期的错误。

6. GDI总是将画笔和画刷绑定在一起,即使不需要填充一个区域也必须指定一个画刷;而GDI+则可以使用不同的函数分开使用画笔和画刷。


【GDI+新特性】

1. 改进了颜色管理。GDI+不仅提供了更多可供选择使用的颜色,使其支持Alpha通道合成运算,而且还保持了与其他颜色的兼容性。

2. 绘图支持反锯齿。通过设置GDI+对象的相关属性,GDI+可以与相关的显示驱动程序搭配完成图形绘制时的反锯齿功能,使得绘制的图形更加平滑,美观,而整个过程是由GDI+对象自动计算完成的。

3. 提供渐变画刷。GDI+拓展了GDI的功能,提供线性渐变和路径渐变画刷来填充图形、路径和区域,甚至也可用来绘制直线、曲线等。

4. 独立的路径对象。GDI+使用Graphics对象来进行绘图操作,并将路径操作从Graphics对象分离出来,提供一个Graphics类供用户使用,用户不必担心对象会受到Graphics对象操作的影响,从而可以使用同一个操作对象进行多次的路径绘制操作。

5. 样条曲线。GDI+封装了绘制基数样条曲线和贝塞尔样条曲线的方法。

6. 变形和矩阵运算。GDI+提供了功能强大的Matrix类来实现矩阵的旋转,错切、平移、比例等变换操作,以便产生复杂的新图形。

7. 多图片格式的支持。GDI+该进了图形处理能力,通过GDI+,用户能够访问多种格式的图片文件,转换文件格式等,还能进行图像重新着色、色彩修正、消除走样等图像处理。

 

在GdiplusBase类可以通过快捷键shift + alt + g找到其相关的类。

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值