首页 GDI编程小结

GDI编程小结

举报
开通vip

GDI编程小结 GDI+(Graphics Device Interface Plus 图形设备接口加)是 Windows XP 和 Windows Server 2003 操作 系统的子系统,也是.NET 框架的重要组成部分,负责在屏幕和打印机上绘制图形图像和显示信息。 GDI+不但在功能上比 GDI 要强大很多,而且在代码编写方面也更简单,因此会很快成为 Windows 图 形图像程序开发的首选。 一、 GDI+的特点和新增功能 GDI+与 GDI 一样,都具有设备无关性...

GDI编程小结
GDI+(Graphics Device Interface Plus 图形设备接口加)是 Windows XP 和 Windows Server 2003 操作 系统的子系统,也是.NET 框架的重要组成部分,负责在屏幕和打印机上绘制图形图像和显示信息。 GDI+不但在功能上比 GDI 要强大很多,而且在代码编写方面也更简单,因此会很快成为 Windows 图 形图像程序开发的首选。 一、 GDI+的特点和新增功能 GDI+与 GDI 一样,都具有设备无关性。应用程序的程序员可利用 GDI+这样的图形设备接口在屏幕或 打印机上显示信息,而不需要考虑特定显示设备的具体情况。应用程序的程序员调用 GDI+类提供的方法, 而这些方法又反过来相应地调用特定的设备驱动程序。GDI+将应用程序与图形硬件隔离,而正是这种隔离 允许开发人员创建设备无关的应用程序。 1、 GDI+ 的功能 GDI+主要提供了以下三种功能: 1) 二维矢量图形 矢量图形包括坐标系统中的系列点指定的绘图基元(如直线、曲线和图形)。例如,直线可通过它的 两个端点来指定,而矩形可通过确定其左上角位置的点并给出其宽度和高度的一对数字来指定。简单路径 可由通过直线连接的点的数组来指定。贝塞尔样条是由四个控制点指定的复杂曲线。 GDI+提供了存储基元自身相关信息的类(结构)、存储基元���制方式相关信息的类,以及实际进 行绘制的类。例如,Rectangle 结构存储矩形的位置和尺寸;Pen 类存储有关线条颜色、线条粗细和线型 的信息;而 Graphics 类具有用于绘制直线、矩形、路径和其它图形的方法(类似于 GDI 中的 CDC 类)。 还有几种 Brush 类,它们存储有关如何使用颜色或图案来填充封闭图形和路径的信息。 用户可以在图元文件中记录矢量图像(图形命令的序列)。GDI+提供了 Metafile 类,可用于记录、显 示和保存图元文件。MetafileHeader 和 MetaHeader 类允许您检查图元文件头中存储的数据。 2) 图像处理 某些种类的图片很难或者根本无法用矢量图形技术来显示。例如,工具栏按钮上的图片和显示为图标 的图片就难以指定为直线和曲线的集合。拥挤的棒球运动场的高分辨率数字照片会更难以使用矢量技术来 制作。这种类型的图像可存储为位图,即代表屏幕上单个点颜色的数字数组。 GDI+提供了 Image、Bitmap 和 Metafile 类,可用于显示、操作和保存位图。它们支持众多的图像文 件格式,还可以进行多种图像处理的操作。 3) 文字显示版式 就是使用各种字体、字号和样式来显示文本。GDI +为这种复杂任务提供了大量的支持。GDI+中的新 功能之一是子像素消除锯齿,它可以使文本在 LCD 屏幕上呈现时显得比较平滑。 2、 GDI+新增特性 1)、渐变画刷 渐变画刷(gradient brush 梯度刷)通过提供用于填充图形、路径和区域的线性渐变画笔和路径渐变画 笔,GDI+扩展了 GDI 的功能。渐变画笔还可用于绘制直线、曲线和路径。线性渐变画笔可用于使用颜色 来填充图形,画笔在图形中移动时,颜色会逐渐改变。例如,假定通过指定图形左边为蓝色、右边为绿色, 创建了一个水平渐变画笔。当用水平渐变画笔填充该图形时,随着画笔从图形的左边移至右边,颜色就会 由蓝色逐渐变为绿色。用类似方法定义的垂直渐变画笔填充的图形,颜色从上到下变化。图显示了用水平 渐变画笔填充的椭圆和用斜式渐变画笔填充的区域。 图 水平和斜式渐变画笔 用路 径渐变画笔填充图形时,可选择不同的方法来指定当从图形的一部分至另一部分移动画笔时颜色的变化方 式。一种选择是指定中心颜色和边缘颜色,在从图形中间向外边缘移动画笔时,像素逐渐从一种颜色变化 到另一种颜色。图显示了用路径渐变画笔填充的路径(该路径是用一对贝塞尔样条创建的)。 图 路径渐变画笔 2)、基数样条函数 GDI+支持在 GDI 中不支持的基数样条(cardinal spines)。基数样条是一连串单独的曲线,这些曲线 连接起来形成一条较长的光滑曲线。样条由点的数组指定,并通过该数组中的每一个点。基数样条平滑地 (没有锐角)通过数组中的每一个点,因此,比通过连接直线创建的路径更光滑精准。图显示了两个路径: 一个以基数样条的形式创建;另一个通过连接直线创建。 图 基数样条路径和折线路径 3)、持久路径对象 在 GDI 中,路径属于设备上下文,并且会在绘制时被毁坏。利用 GDI +,绘图由 Graphics 对象执行, 可以创建并维护几个与 Graphics 对象分开的持久的路径对象(persistent path object)—— GraphicsPath 对象。绘图操作不会破坏 GraphicsPath 对象,因此可以多次使用同一个 GraphicsPath 对象来绘制路径。 4)、变换和矩阵对象 GDI+提供了 Matrix(矩阵) 对象,它是一种可以使(缩放、旋转和平移等)变换(transformation) 简易灵活的强大工具。矩阵对象一般与变换对象联合使用。例如,GraphicsPath 对象具有 Transform 方 法,此方法接收 Matrix 对象作为参数。单一的 3×3 矩阵可存储一种变换或一个变换序列。图显示了一个 路径在执行两种变换前后的情况。 图 路径的变换 5)、可伸缩区域 GDI+ 通过对可伸缩区域(Scalable Regions)的支持极大地扩展了 GDI。在 GDI 中,区域被存储在 设备坐标中,而且,可应用于区域的惟一变换是平移。而 GDI+在全局坐标中存储区域,并且允许区域发生 任何可存储在变换矩阵中的变换(如缩放和旋转)。图显示一个区域在执行三种变换(缩放、旋转和平移) 前后的情况。 图 区域的三种变换(缩放、旋转和平移) 6)、α 混色 在下图中,可以在变换区域(用蓝色阴影画笔填充)中看到未变换区域(用红色填充)。这是由 GDI+ 支持的 α 混色(Alpha Blending,透明混合)实现的。使用 α 混色,可以指定填充颜色的透明度。透明色 与背景色相混合———填充色越透明,透出的背景色就越多。图显示四个用相同颜色(红色)填充、但透 明层次不同的椭圆。 图 不同透明度 7)、丰富的图像格式支持 GDI+提供 Image、Bitmap 和 Metafile 类,可以用不同的格式加载、保存和操作图像。GDI+支持 BMP、 GIF、JPEG、EXIF、PNG、TIFF、ICON、WMF、EMF 共 9 种常见的图像格式。 8)、GDI+的不足 虽然,相对于 GDI 来说,GDI+ 确实增加了许多新特性,而且功能更强大,使用也更方便。但是,这 并不等于 GDI+ 就能够完全代替 GDI。 因为 GDI+实际上是 GDI 的封装和扩展,GDI+的执行效率一般要低于 GDI 的。另外,GDI+不支持图 的位运算,那么就不能进行异或绘图等操作。而且在 VC 中,GDI+ 还不支持双缓存机制(如内存 DC 和 显示 DC),这将大大影响 GDI+ 在高速图形、图像、动画和视频等方面的应用。 3、 GDI+的使用 1) GDI+开发包 若采用的是 Visual C++ 2008,则已经包含了开发 GDI+应用程序所需的所有东西。如果使用的是 Visual C++6.0 而非 VS.Net,我们需要下载微软的 GDIPLUS 支持包。在微软官方网站下载时需认证 Windows 为 正版,我们可从这个地址下载:http://www.codeguru.com/code/legacy/gdi/GDIPlus.zip。一个完整的 GDI+ 支持包至少包括如下文件: (1)头文件:gdiplus.h (2)动态链接库的.lib 文件:gdiplus.lib (3)动态链接库的.dll 文件:gdiplus.dll 少了(1)、(2)程序不能编译,少了(3)程序能以共享 DLL 的方式编译但是不能运行,运行时找不到.dll 文件。 如果你使用的操作系统是 Windows XP 或 Windows Server 2003,则 GDI+所对应的动态链接库,已 经被包含在其中。gdiplus.dll 一般位于操作系统的 WinSxS(Windows side-by-side assembly,视窗并行 程序集)目录中,例如: C:\WINDOWS\WinSxS\x86_Microsoft.Windows.GdiPlus_6595b64144ccf1df_1.0.0.0_x-ww_8d353f13\gd iplus.dll(1661KB,2002.10.8) 而 GDI 的动态链接库 gdi32.dll,却一般在操作系统的 32 位系统目录中: F:\WINDOWS\system32\gdi32.dll(272KB,2004.8.4) 2) VC 使用 GDI+初始化准备工作。 #define UNICODE #ifndef ULONG_PTR #define ULONG_PTR unsigned long* #endif #include "c:\gdiplus\includes\gdiplus.h" using namespace Gdiplus; #pragma comment(lib, "c:\\gdiplus\\lib\\gdiplus.lib") //在 CWinApp 派生类的 InitInstance 函数中加入: //初始化 gdiplus 的环境 GdiplusStartupInput gdiplusStartupInput; ULONG_PTR gdiplusToken; // 初始化 GDI+. GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); //在 CWinApp 派生类的 ExitInstance 函数中加入: //关闭 gdiplus 的环境 GdiplusShutdown(gdiplusToken); 4、GDI+的组成 GDI+ API 包含 54 个类、12 个函数、6 类(226 个)图像常量、55 种枚举和 19 种结构。 1)、类 GDI+ API 中共有 54 个类,核心类是 Graphics,它是实际绘制直线、曲线、图形、图像和文本的类。 许多其它 GDI+类是与 Graphics 类一起使用的。例如,DrawLine 方法接收 Pen 对象,该对象中存有所要 绘制的线条的属性(颜色、宽度、虚线线型等)。FillRectangle 方法可以接收指向 LinearGradientBrush 对象的指针,该对象与 Graphics 对象配合工作来用一种渐变色填充矩形。Font 和 StringFormat 对象影响 Graphics 对象绘制文本的方式。Matrix 对象存储并操作 Graphics 对象的仿射变换——旋转、缩放和翻转 图像。 GDI+还提供了用于组织图形数据的几种结构类(例如 Rect、Point 和 Size)。而且,某些类的主要作 用是结构化数据类型。例如,BitmapData 类是 Bitmap 类的帮助器,PathData 类是 GraphicsPath 类的帮 助器。 下面是所有 GDI+的 API 类的列表: GDI+的 API 类(54 个) 名称 类 功能 调整箭头帽 AdjustableArrowCap 创建自定义箭头线帽 位图 Bitmap 提供装入和保存矢量和光栅图像的方法,并可以创建和操作光栅图像 位图数据 BitmapData 保存位图的属性 模糊 Blur 将高斯模糊效果作用到图像 亮度对比度 BrightnessContrast 改变图像的亮度和对比度 刷 Brush 定义刷对象 缓存图像 CachedBitmap 用为特点设备显示而优化过的格式存储位图 字符范围 CharacterRange 指定串内字符位置的范围 颜色 Color 保存表示颜色的 32 位值 色平衡 ColorBalance 改变位图的颜色平衡 颜色曲线 ColorCurve 可调整位图的曝光度、密度、对比度、加亮、阴影、色调、白饱和和黑饱和。 颜色查找表 ColorLUT 用于定制位图的颜色调整 颜色矩阵效果 ColorMatrixEffect 对位图进行仿射变换 定制线帽 CustomLineCap 封装了自定义线帽 效果 Effect 作用于图像的效果和调整类的基类 编码器参数 EncoderParameter 保存图像编码器的参数 编码器参数组 EncoderParameters 图像编码器参数的数组 字体 Font 封装了字体的族系、高度、大小和风格等特性 字体集 FontCollection 包含枚举字体集中的字体族系的方法 字体族 FontFamily 封装了构成一个字体族的字体集合 GDI+基类 GdiplusBase 提供对 GDI+对象的存储分配与释放,是其它 GDI+类的基类 图形 Graphics 提供绘制图形、图像和文本的方法,存储显示设备和被画项目的属性 图形路径 GraphicsPath 保存一个供绘图用的直线、曲线和形状序列 图形路径迭代器 GraphicsPathIterator 提供从保存在 GraphicsPath 对象中的路径里选择孤立子集的方法 影线刷 HatchBrush 定义具有影线风格和前景色/背景色的矩形刷 色调饱和度亮度 HueSaturationLightness 改变位图的色调 H、饱和度 S 和亮度 L 图像 Image 提供装入和保存矢量和光栅图像的方法 图像属性 ImageAttributes 含渲染时如何操作位图和图元文件颜色的信息 图像编解码信息 ImageCodecInfo 存储与图像编解码有关的信息 图像项数据 ImageItemData 用于存储和获取自定义图像的元数据 已装入字体集 InstalledFontCollection 定义表示已装入系统中的字体集 级别 Levels 可调整位图的加亮、阴影和色调 线形梯度刷 LinearGradientBrush 定义线性渐变刷 矩阵 Matrix 表示 3×3 的仿射变换矩阵 图元文件 Metafile 定义包含描述一系列图形 API 调用记录的图形元文件,可被记录(构造)和回放(显示) 图元文件头 MetafileHeader 保存关联图元文件的性质 路径数据 PathData GraphicsPath 和 GraphicsPathIterator 类的助手类,用于获取和设置路径中的数据点及其类型 路径梯度刷 PathGradientBrush 保存颜色的梯度属性,用于渐变色填充路径内部 笔 Pen 用于绘制直线和曲线的笔对象 点 Point 封装 2D 整数坐标系统中的点 浮点点 PointF 封装 2D 浮点坐标系统中的点 专用字体集 PrivateFontCollection 保存用于特定应用程序的字体集,可含未装入系统中的字体 特性项 PropertyItem Image 和 Bitmap 类的助手类,保存一块(piece)图像元数据 矩形 Rect 保存矩形的左上角、宽度和高度之对象(整数) 浮点矩形 RectF 保存矩形的左上角、宽度和高度之对象(浮点数) 红眼校正 RedEyeCorrection 校正有时在闪光照片中出现的红眼 区域 Region 描述显示表面的范围,可以是任意形状 锐化 Sharpen 调整位图的清晰度 大小 Size 封装 2D 整数坐标系统中的宽和高 浮点大小 SizeF 封装 2D 浮点数坐标系统中的宽和高 实心刷 SolidBrush 定义实心颜色的刷子对象 串格式 StringFormat 封装文本的格式(layout)信息和显示操作 纹理刷 TextureBrush 用于填充的包含图像对象的刷子 浓淡 Tint 改变位图的色彩浓淡 下面是 GDI+ API 类的层次结构图: GdiplusBase Graphics GraphicsPath GraphicsPathIterator Pen Brush SolidBrush HatchBrush TextureBrush LinearGradientBrush PathGradientBrush Image Bitmap Metafile CustomLineCap AdjustableArrowCap CachedBitmap ImageAttributes FontCollection InstalledFontCollection PrivateFontCollection StringFormat Region Font FontFamily Matrix Point PointF Size SizeF Rect RectF Color Effect Blur BrightnessContrast ColorBalance ColorCurve ColorLUT ColorMatrixEffect HueSaturationLightness Levels RedEyeCorrection Sharpen Tint ImageItemData BitmapData MetafileHeader PropertyItem EncoderParameter EncoderParameters ImageCodecInfo PathData CharacterRange 独立类 绘图类 效果类 GDI+类的层次结构图 2)、函 数 GDI+命名空间中的函数(12 个) 名称 函数 功能 关闭 GDI+ GdiplusShutdown 清除 GDI+所使用的资源 启动 GDI+ GdiplusStartup 初始化 GDI+ 获取图像解码器 GetImageDecoders 获取含有可用图像解码器信息的 ImageCodecInfo 对象数组 获取图像解码器的大小 GetImageDecodersSize 获取含有可用图像解码器的数目 获取图像编码器 GetImageEncoders 获取含有可用图像编码器信息的 ImageCodecInfo 对象数组 获取图像编码器的大小 GetImageEncodersSize 获取含有可用图像编码器的数目 获取像素格式大小 GetPixelFormatSize 返回指定像素格式的每像素二进制位数 是否为 α 像素格式 IsAlphaPixelFormat 确定指定像素格式是否有 α 分量 是否为 规范 编程规范下载gsp规范下载钢格栅规范下载警徽规范下载建设厅规范下载 像素格式 IsCanonicalPixelFormat 确定指定像素格式是否为规范格式之一 是否为扩展像素格式 IsExtendedPixelFormat 确定指定像素格式是否使用 16 位色 是否为索引像素格式 IsIndexedPixelFormat 确定指定像素格式是否是索引格式 对象类型是否有效 ObjectTypeIsValid 确定 ObjectType 枚举元素是否表示一个有效对象类型 3)、常量 GDI+中定义了如下 6 类图像常量(226 个):(GdiplusImaging.h) 类型 常量 说明 图像 文件 格式 ImageFormat* (11 个) ImageFormatBMP BMP(BitMaP 位图) ImageFormatEMF EMF(Enhanced MetaFile 增强图元文件) ImageFormatEXIF Exif(Exchangeable Image File 可交换图像文件) ImageFormatGIF GIF(Graphics Interchange Format 图形交换格式) ImageFormatIcon Icon(图标) ImageFormatJPEG JPEG(Joint Photographic Experts Group 联合图象专家组) ImageFormatMemoryBMP 从内存位图构造的图像 ImageFormatPNG PNG(Portable Network Graphics 可移植网络图形) ImageFormatTIFF TIFF(Tagged Image File Format 标签图像文件格式) ImageFormatUndefined 不能确定格式 ImageFormatWMF WMF(Windows Metafile Format 视窗图元文件格式) 图像 帧维 FrameDimensionPage 多帧 TIFF 图像 FrameDimensionTime 多帧 GIF 图像 图像 编码器 (13 个) EncoderChrominanceTable 色度表 EncoderColorDepth 颜色深度 EncoderColorSpace 颜色空间 EncoderCompression 压缩 EncoderLuminanceTable 亮度表 EncoderQuality 质量 EncoderRenderMethod 渲染方法 EncoderSaveFlag 保存标志 EncoderScanMethod 扫描方法 EncoderTransformation 变换 EncoderVersion 版本 EncoderImageItems 图像项 EncoderSaveAsCMYK 保存为 CMYK(Cyan 青、Magenta 品红、Yellow 黄、blacK 黑,用于印刷的四分色) 图像 像素 格式 (14 个) PixelFormat1bppIndexed 每像素 1 位,索引色 PixelFormat4bppIndexed 每像素 4 位,索引色 PixelFormat8bppIndexed 每像素 8 位,索引色 PixelFormat16bppARGB1555 每像素 16 位,α 分量 1 位、RGB 分量各 5 位 PixelFormat16bppGrayScale 每像素 16 位,灰度 PixelFormat16bppRGB555 每像素 16 位,RGB 分量各 5 位,另 1 位未用 PixelFormat16bppRGB565 每像素 16 位,RB 分量各 5 位、G 分量 6 位 PixelFormat24bppRGB 每像素 24 位,RGB 分量各 8 位 PixelFormat32bppARGB 每像素 32 位,αRGB 分量各 8 位 PixelFormat32bppPARGB 每像素 32 位,αRGB 分量各 8 位,RGB 分量预乘 α 分量 PixelFormat32bppRGB 每像素 24 位,RGB 分量各 8 位,另 8 位未用 PixelFormat48bppRGB 每像素 48 位,RGB 分量各 16 位 PixelFormat64bppARGB 每像素 64 位,αRGB 分量各 16 位 PixelFormat64bppPARGB 每像素 64 位,αRGB 分量各 16 位,RGB 分量预乘 α 分量 图像 特性 标志 类型 (9 个) PixelFormat4bppIndexed 格式为每像素 4 位,索引色 PropertyTagTypeASCII 值数据成员为以 null 结尾的 ASCII 字符串 PropertyTagTypeByte 值数据成员为字节数组 PropertyTagTypeLong 值数据成员为 32 位无符号长整数的数组 PropertyTagTypeRational 值数据成员为 32 位无符号长整数对的数组,每对数中的第一个整数为分子,第二个整数为分母 PropertyTagTypeShort 值数据成员为 16 位无符号短整数的数组 PropertyTagTypeSLONG 值数据成员为 32 位有符号长整数的数组 PropertyTagTypeSRational 值数据成员为 32 位有符号长整数对的数组,每对数中的第一个整数为分子,第二个整数为分母 PropertyTagTypeUndefined 值数据成员为字节数组,可保存任何数据类型的值 图像 特性 标志 (217 个) PropertyTagGpsVer ~ GPS(Global Positioning Systems 全球定位系统)版本 PropertyTagGpsDestDist (0x0000)~ 到目标点的距离(0x001A)(27 个) PropertyTagNewSubfileType ~ 子文件数据类型(0x00FE)~ PropertyTagPageNumber 被扫描图像的页数(0x0129)(44 个) PropertyTagTransferFunction 图像传送函数表(0x012D) PropertyTagSoftwareUsed 指定用于生成图像的设备之软件或固件的名称和版本的以 null 结尾的字符串(0x0131) PropertyTagDateTime 图像创建的日期和时间(0x0132) PropertyTagArtist ~ 指定图像创建者姓名的以 null 结尾的字符串(0x013B) PropertyTagTileByteCounts ~ 标题的字节数(0x0145)(11 个) PropertyTagInkSet ~ 在分开图像中使用的墨水集(0x014C) PropertyTagNumberOfInks ~ 墨水数目(0x014D)(3 个) PropertyTagDotRange ~ 对应于 0%点和 100%点的颜色分量值(0x0150)~ PropertyTagTransferRange 扩充传送函数范围的值表(0x0156)(7 个) PropertyTagJPEGProc ~ JPEG 压缩过程(0x0200)~ PropertyTagImageTitle 图像标题的以 null 结尾的字符串(0x0320)(17 个) PropertyTagResolutionXUnit ~ 显示水平分辨率的单位(0x5001)~(27 个) PropertyTagThumbnailData RGB 或 JPEG 中的原始缩略图中的位数据(0x501B) PropertyTagThumbnailImage Width ~ 略图像的每行像素数(0x5020)~(28 个) PropertyTagThumbnailCopy Right 含缩略图像版权信息的以 null 结尾的字符串(0x503B) PropertyTagLuminanceTable 亮度表(0x5090) PropertyTagFrameDelay ~ GIF 动画中两帧之间的延时,单位为 10 毫秒(0x5100) PropertyTagPaletteHistogram ~ 调色板直方图(0x5113)(9 个) PropertyTagCopyright ~ 含版权信息的以 null 结尾的字符串(0x8298B)~ PropertyTagExifCfaPattern 颜色滤波器数组(0xA302)(48 个) 4)、枚举 GDI+定义了 55 种枚举,它们都是相关常数的集合。例如,LineJoin 枚举包含元素 Bevel、Miter 和 Round,它们指定可用于连接两个线条的线型。下面是所有枚举类型的列表: GDI+枚举类型(55 种) 枚举类型 名称 枚举类型 名称 BrushType 刷类型 ImageType 图像类型 ColorAdjustType 颜色调整类型 InterpolationMode 插值类型 ColorChannelFlags 颜色通道标志 ItemDataPosition 项数据位置 ColorMatrixFlags 颜色矩阵标志 LinearGradientMode 线性梯度模式 CombineMode 组合模式 LineCap 线帽 CompositingMode 合成模式 LineJoin 线连接 CompositingQuality 合成质量 MatrixOrder 矩阵序(左右乘) CoordinateSpace 坐标空间 MetafileFrameUnit 图元文件帧单位 CurveAdjustments 曲线调整 MetafileType 图元文件类型 CurveChannel 曲线通道 ObjectType 对象类型 DashCap 虚线帽 PaletteFlags 调色板标志 DashStyle 虚线风格 PaletteType 调色板类型 DitherType 抖动类型 PathPointType 路径点类型 DriverStringOptions 驱动器串选项 PenAlignment 笔对齐 EmfPlusRecordType EMF+等图元文件记录类型 PenType 笔类型 EmfToWmfBitsFlags EMF 转 WMF 的标志位 PixelOffsetMode 像素偏移模式 EmfType EMF 类型 RotateFlipType 旋转翻转类型 EncoderParameterValueType 编码器参数值类型 SmoothingMode 平滑模式 EncoderValue 编码器值 Status 状态 FillMode 填充模式 StringAlignment 串对齐 FlushIntention 刷新意图 StringDigitSubstitute 串数字替换 FontStyle 字体风格 StringFormatFlags 串格式标志 HatchStyle 影线风格 StringTrimming 串修整 HistogramFormat 直方图格式 TextRenderingHint 文本渲染提示 HotkeyPrefix 热键前缀 Unit 单位 ImageCodecFlags 图像编解码标志 WarpMode 弯曲模式 ImageFlags 图像标志 WrapMode 覆盖模式 ImageLockMode 图像加锁模式 5)、结构 GDI+ API 中还定义了 19 种结构,用于 GDI+的各种函数调用中。下面是所有 GDI+ API 结构的列表: GDI+ API 中的结构(19 种) 结构 名称 BlurParams 模糊参数 BrightnessContrastParams 亮度对比度参数 ColorBalanceParams 颜色平衡参数 ColorCurveParams 颜色曲线参数 ColorLUTParams 颜色查找表参数 ColorMap 颜色映射 ColorMatrix 颜色矩阵 ColorPalette 颜色调色板 ENHMETAHEADER3 增强图元文件头 GdiplusAbort GDI+异常中断 GdiplusStartupInput GDI+启动输入 GdiplusStartupOutput GDI+启动输出 HueSaturationLightnessParams 色调饱和度亮度参数 LevelsParams 级别参数 PWMFRect16 可定位 WMF 矩形(INT16 整数值) RedEyeCorrectionParams 红眼校正参数 SharpenParams 锐化参数 TintParams 浓淡参数 WmfPlaceableFileHeader 可定位 WMF 文件头 6)、GDI+平面 API GDI+暴露出(exposes)一个平面(flat)API,它包含大约 600 个函数,被实现在 Gdiplus.dll 中,声 明在 Gdiplusflat.h 内。这些函数被包装到了前面讨论过的 GDI+ API 的 54 个 C++类的集合之中。不要直接 调用这些函数,而推荐用调用类成员方法来替代。因为微软产品支持服务(Microsoft Product Support Services),不会为直接调用平面 API 的代码提供支持。 作为 C++封装的替代方案,微软网络框架(Microsoft .NET Framework),提供了 GDI+的一个托管代 码封装类集,包含大约 60 个类、50 个枚举和 8 个结构。它们属于下列命名空间: // 在 C#中使用之 System.Drawing System.Drawing.Drawing2D System.Drawing.Imaging System.Drawing.Text System.Drawing.Printing DllExports System.Drawing[.dll] Gdiplus Gdiplus.h afxwin.h C++封装 (MFC) C++封装 托管代码封装 设备驱动程序 计算机硬件(显示器、打印机等图形设备) GDI API GDI+平面 API C++ C#、VB、J# GDI+ API GDI+托管类接口 GDI 类与结构 Gdi32.dll WinGDI.h Gdiplus.dll GdiplusFlat.h GDI+的 封装与使用 这两种包装(C++和托管代码)都采用了面向对象方法,所以二者在将参数传递给封装的方法和将参 数传递给平面 API 函数的方式上存在差别。 二、GDI+编程 本部分简单介绍 GDI+编程中的一些概念与技巧,具体的编程细节请参考《精通 GDI+编程》、陈宝楷 《GDI+编程》等书籍。 1、Point、浮点数点类 PointF;Size、浮点数大小类 SizeF;Rect、浮点数矩形类 RectF 等。 浮 点数版的几何对象和绘图函数,是 GDI+新增的功能,这些在各种工程技术领域都非常有用。因为一般的实 际图形 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 ,都是基于实数坐标的。包括机械(机床/汽车/轮船/飞机等)、建筑(房屋/桥梁/道路/堤坝等) 和图形动画设计(形状/物体/人物/背景/轨迹等)等设计,都必须使用浮点参数和坐标系。 2、Color:在 GDI+中,色彩是通过 Color(色彩)类来描述的。Color 类的构造函数分别为: Color(); Color(BYTE a,BYTE r,BYTE g,BYTE b); Color(ARGB argb); Color(BYTE r,BYTE g,BYTE b); 参数: a:色彩的透明度(0~255) r、g、b:红、绿、蓝 3 种色彩分量值(0~255) 不同于 GDI,GDI+在对色彩支持方面主要体现在对色彩的透明度支持。从本质上讲,透明度是像素之 间的一种合成运算。它的计算公式是: 输出色彩=前景色*Alpha/255 + 背景色*(255-Alpha)/255 3、Graphics(图形) 图形类 Graphics 是 GDI+的核心,它提供绘制图形、图像和文本的各种方法(操作/函数)(似 GDI 中的 CDC 类),还可以存储显示设备和被画项目的属性(到图元文件)。Graphics 类及其成员函数都被 定义在头文件 Gdiplusgraphics.h 中。 Graphics 类的构造函数有如下 4 种: Graphics(Image* image); // 用于绘制图像 Graphics(HDC hdc); // 用于在当前窗口中绘图 Graphics(HDC hdc, HANDLE hdevice); // 用于在指定设备上绘制图形 Graphics(HWND hwnd, BOOL icm = FALSE); // 用于在指定窗口中绘图可以进行颜色调整 其中,最常用的是第二种——在当前视图窗口中绘图的图形类构造函数。 注意,该构造函数的输入参数,是设备上下文的句柄,而不是 CDC 类对象的指针。一般可以由 CDC 对象得到(CDC 类含有公用数据成员 HDC m_hDC;) 6 种绘制直线和折线的函数:(前三个为整数版,后三个为对应的浮点数版) // 画折线 DrawLines Status DrawLine(const Pen* pen, INT x1, INT y1, INT x2, INT y2); Status DrawLine(const Pen* pen, const Point& pt1, const Point& pt2); Status DrawLines(const Pen* pen, const Point* points, INT count); // 画折线 Status DrawLine(const Pen* pen, REAL x1, REAL y1, REAL x2, REAL y2); Status DrawLine(const Pen* pen, const PointF& pt1, const PointF& pt2); Status DrawLines(const Pen* pen, const PointF* points, INT count); 6 种绘制矩形和矩形组的函数:(也是前三个为整数版,后三个为对应的浮点数版) // Rectangle = rect angle Status DrawRectangle(const Pen* pen, const Rect& rect); Status DrawRectangle(const Pen* pen, INT x, INT y, INT width, INT height); Status DrawRectangles(const Pen* pen, const Rect* rects, INT count); Status DrawRectangle(const Pen* pen, const RectF& rect); Status DrawRectangle(const Pen* pen, REAL x, REAL y, REAL width, REAL height); Status DrawRectangles(const Pen* pen, const RectF* rects, INT count); 绘制椭圆的函数,如果输入参数所确定的外接矩形的宽高相等,则画圆。(也是前两个为整数版,后 两个为对应的浮点数版) Status DrawEllipse(const Pen* pen, const Rect& rect); Status DrawEllipse(const Pen* pen, INT x, INT y, INT width, INT height) Status DrawEllipse(const Pen* pen, const RectF& rect); Status DrawEllipse(const Pen* pen, REAL x, REAL y, REAL width, REAL height); 绘制椭圆弧的函数,如果输入参数所确定的外接矩形的宽高相等,则画圆弧。(也是前两个为整数版, 后两个为对应的浮点数版) Status DrawArc(const Pen* pen, INT x, INT y, INT width, INT height, REAL startAngle, REAL sweepAngle); // sweep 掠过 Status DrawArc(const Pen* pen, const Rect& rect, REAL startAngle, REAL sweepAngle); Status DrawArc(const Pen* pen, REAL x, REAL y, REAL width, REAL height, REAL startAngle, REAL sweepAngle); Status DrawArc(const Pen* pen, const RectF& rect, REAL startAngle, REAL sweepAngle); 画弧函数的输入参数 // 注意:顺时 钟方向 该函数的功能与 GDI 的 Arc 相同: BOOL Arc( int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4 ); BOOL Arc( LPCRECT lpRect, POINT ptStart, POINT ptEnd ); 但是也有区别,主要是,最后的参数不再是弧的终角,而是弧段所对应的扫描角。这倒是与另一个 GDI 画圆弧函数类似(其中(x, y)为圆心、nRadiu
本文档为【GDI编程小结】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_749828
暂无简介~
格式:pdf
大小:698KB
软件:PDF阅读器
页数:47
分类:互联网
上传时间:2011-04-09
浏览量:28