GDI+ SDK官方教程:全面详解与实例

需积分: 9 2 下载量 125 浏览量 更新于2024-07-24 2 收藏 3MB DOC 举报
本篇教程是关于Microsoft GDI+ SDK的官方指南,旨在帮助开发者深入了解和掌握GDI+在Visual C++和MFC框架下的应用。GDI+(Graphics Device Interface Plus)是Windows操作系统中的一种图形应用程序接口,它扩展了Windows GDI的功能,提供了更强大的矢量图形处理能力。 序言: 文档首先介绍了GDI+的背景和目的,它强调了GDI+在现代图形应用程序开发中的关键角色,特别是对于需要高质量矢量图形和性能优化的应用。 目标和适用范围: GDI+ SDK教程覆盖的主题广泛,包括但不限于构造函数的使用、错误处理、线程同步、安全注意事项以及性能优化策略。其目标读者是对GDI+有基础了解的程序员,尤其是那些使用VC++和MFC开发图形密集型应用的开发者。 运行环境: 本教程适用于Windows平台,特别关注于Visual Studio IDE和Windows操作系统提供的GDI+支持。 文档组织: 教程按照逻辑顺序组织,先从基础知识如构造函数调用、缓冲区分配和错误校验开始,然后逐步深入到图形操作、颜色处理、变换、打印等高级主题。每个部分都配有详细的示例代码和实用技巧。 安全考虑: GDI+的安全措施被重点提及,确保开发者在处理图形资源时遵循最佳实践,防止内存泄漏或安全漏洞。 编程模式变化: 教程还讨论了GDI+如何改变了传统的图形编程模式,比如通过基于类的接口,使得图形操作更加直观和高效。 矢量图形和形状: 部分涵盖了矢量图的基础概念,如钢笔、线条、矩形、椭圆、弧线、多边形、贝塞尔和基数样条曲线的绘制,以及路径、画刷和填充图形的使用。 图像和位图: 图元文件(如WMF和EMF)的处理也十分重要,包括加载、显示、裁剪、缩放以及与图像编码器和解码器的交互。此外,教程还介绍了Alpha混合技术,用于处理线条和填充的透明度。 字体和文本: 文本处理是GDI+的重要组成部分,包括字体构造、文本绘制、格式化、枚举字体以及使用渐变画刷填充形状。 高级主题: 教程的尾部部分涉及更复杂的概念,如变换(包括世界变换、区域、剪辑)、颜色操作(如矩阵转换、缩放、旋转、颜色重映射)、以及打印功能的优化。 总结来说,这篇GDI+ SDK教程提供了全面且详尽的指导,不仅适合初学者学习GDI+的基本用法,也适合经验丰富的开发者深化理解和提升他们的图形处理技能。无论是开发游戏、图形用户界面还是专业设计软件,都能从中获益良多。
2012-08-16 上传
GDI+ SDK参考中文版 即GDI+ SDK参考手册的翻译版本,希望对大家有用! 目录: 关于GDI+ 11 GDI+ 介绍 11 GDI+ 概览 11 GDI+ 的三个组成部分 11 基于类的接口架构 12 GDI+提供了哪些新东西? 12 新特征 12 编程模式的改变 15 线条、曲线和图形 19 矢量图概览 19 钢笔、线条和矩形 20 椭圆和弧 22 多边形 22 基数样条 23 贝塞尔样条 24 路径 25 画刷和填充图形 27 开放与闭合曲线 29 区域 30 裁剪 31 路径平直化 32 线条和曲线的抗锯齿功能 32 图象、位图和图元文件 33 位图类型 34 图元文件 37 绘制、定位和复制图片 39 裁剪和缩放图象 40 坐标系统和转换 42 坐标系统类型 42 以矩阵来表示转换 44 全局和局部转换 48 图形容器 51 使用GDI+ 56 使用入门 56 绘制线条 56 绘制字符串 58 使用钢笔绘制线条和形状 59 使用钢笔绘制线条和矩形 59 设置钢笔的宽度和对齐方式 60 绘制具有线帽的线条 61 联接线条 62 绘制自定义虚线 62 绘制用纹理填充的线条 63 使用画笔填充形状 63 用纯色填充形状 64 用阴影图案填充形状 64 用图像纹理填充形状 64 在形状中平铺图像 65 用渐变色填充形状 68 使用图像、位图和图元文件 68 加载和显示位图 68 加载和显示图元文件 69 记录图元文件 69 剪裁和缩放图像 71 旋转、反射和扭曲图像 72 缩放时使用插值模式控制图像质量 73 创建缩略图像 75 采用高速缓存位图来提高性能 76 通过避免自动缩放改善性能 76 读取图像元数据 77 使用图像编码器和解码器 83 列出已安装的编码器 83 列出已安装的解码器 84 获取解码器的类标识符 86 获取编码器的参数列表 88 将BMP图像转换为PNG图像 100 设定JPEG的压缩等级 101 对JPEG图像进行无损变换 102 创建和保存多帧图像 105 从多帧图像中复制单帧 107 Alpha 混合线条和填充 109 绘制不透明和半透明的线条 109 用不透明和半透明的画笔绘制 110 使用复合模式控制 Alpha 混合 111 使用颜色矩阵设置图像中的 Alpha 值 112 设置单个象素的alpha值 114 使用字体和文本 115 构造字体系列和字体 115 绘制文本 116 格式化文本 117 枚举已安装的字体 120 创建专用的字体集合 122 获取字体规格 126 对文本使用消除锯齿效果 130 构造并绘制曲线 131 绘制基数样条曲线 131 绘制贝塞尔样条 133 用渐变画刷填充形状 134 创建线性渐变 134 创建路径渐变 137 将 Gamma 校正应用于渐变 144 构造并绘制路径 145 使用线条、曲线和形状创建图形 145 填充开放式图形 147 使用图形容器 147 管理 Graphics 对象的状态 148 使用嵌套的 Graphics 容器 151 变换 154 使用世界变换 154 为什么变换顺序非常重要 155 使用区域 156 对区域使用点击检测 156 对区域使用剪辑 157 对图像重新着色 158 使用颜色矩阵对单色进行变换 158 转换图像颜色 160 缩放颜色 161 旋转颜色 164 剪取颜色 166 使用颜色重映射表 168 打印 169 将GDI+输出至打印机 169 显示一个打印对话框 172 通过提供打印机句柄优化打印 173 附录:GDI+ 参考 176
2016-08-29 上传
Visual C++6.0使用GDI+的一般方法 1. 载解压GDI+开发包; 2. 正确设置include & lib 目录; 3. stdafx.h 添加: #ifndef ULONG_PTR #define ULONG_PTR unsigned long* #endif #include 4. 程序中添加GDI+的包含文件gdiplus.h以及附加的类库gdiplus.lib。 通常gdiplus.h包含文件添加在应用程序的stdafx.h文件中,而gdiplus.lib可用两种进行添加: 第一种是直接在stdafx.h文件中添加下列语句: #pragma comment( lib, "gdiplus.lib" ) 另一种方法是: 在VC.net中添加库文件在:项目菜单->属性->链接器->输入 举个例子: (1)在应用程序项目的应用类中,添加一个成员变量,如下列代码: ULONG_PTR m_gdiplusToken; 其中,ULONG_PTR是一个DWORD数据类型,该成员变量用来保存GDI+被初始化后在应用程序中的GDI+标识,以便能在应用程序退出后,引用该标识来调用Gdiplus:: GdiplusShutdown来关闭GDI+。 (2)在应用类中添加ExitInstance的重载,并添加下列代码用来关闭GDI+: int CGDITestApp::ExitInstance() { Gdiplus::GdiplusShutdown(m_gdiplusToken); return CWinApp::ExitInstance(); } (3)在应用类的InitInstance函数中添加GDI+的初始化代码: 注意:下面这些GDI+的初始化代码必须放在m_pMainWnd->UpdateWindow();之前。 CWinApp::InitInstance(); Gdiplus::GdiplusStartupInput gdiplusStartupInput; Gdiplus::GdiplusStartup(&m_gdiplusToken, &gdiplusStartupInput, NULL); (4)在需要绘图的窗口或视图类中添加GDI+的绘制代码。 下面分别就单文档和基于对话框应用程序为例,说明使用GDI+的一般过程和方法。 1. 在单文档应用程序中使用GDI+ 在上面的过程中,我们就是以一个单文档应用程序Ex_GDIPlus作为示例的。下面列出第4步所涉及的代码: void CGDITestView::OnDraw(CDC* pDC) { CGDITestDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here usingnamespace Gdiplus; Graphics graphics(pDC->m_hDC); Pen newPen(Color(255,0,0),3); HatchBrush newBrush(HatchStyleCross,Color(255,0,255,0),Color(255,0,0,255));//创建一个填充画刷,前景色为绿色,背景色为蓝色 graphics.DrawRectangle(&newPen,50,50,100,60);// 在(50,50)处绘制一个长为100,高为60的矩形 graphics.FillRectangle(&newBrush,50,50,100,60); // 在(50,50)处填充一个长为100,高为60的矩形区域 } 编译并运行,结果如图: