一、GDI+基础
1、定义:
GDI+是一个库,它提供了一个接口,此接口允许程序员编写与打印机、监视器或文件等图形设备进行交互的Windows和web图形应用程序。
2、什么是GDI+
是一组C++类,位于一个名为Gdiplus.dll的类库中。
3、受控代码与不受控代码
在.net framework中,编写的受公共语言运行时(CLR)控制的代码称为受控代码,而不受其控制的称为不受控代码;
4、在.NET Framework库中提供的受控GDI+类是在System.Drawing名称空间以及它的五个子名称空间中定义的,这些子名称空间为
:System.Drawing.Design,System.Drawing.Drawing2D,System.Drawing.Imaging,System.Drawing.Printing和System.Drawing.Text。
5、GDI+的功能分为五类类:二维矢量图形、图形处理、版式、打印和设计。
6、在GDI+中,设备上下文的概念和设备上下文句柄被Graphics对象取代。Graphics类提供了绘制不同图形对象的方法和属性
;
例如:
首先需要一个与窗体关联的Graphics对象,通常在窗体的Form_Paint事件或者OnPaint方法中可以找到此对象。在得到了一个与窗体相关的Graphics对象后,可以调用它的绘制和填充方法来绘制和填充不同的图形对象,如直线、矩形和曲线等。
//通过使用PaintEventArgs.Graphics得到一个与窗体相关联的Graphics对象。然后,创建一个Pen对象和直线的起始点及结束点作为参数,在窗体上绘制一条直线。
private void Form1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
Pen pn = new Pen(Color.Red, 3);
g.DrawLine(pn, 20, 20, 200, 200);
}
7、System.Drawing名称空间
类 | 描述 |
---|---|
Bitmap | 该类封装了一个位图,位图是以像素格式存储的图像 |
Brush | 该类是一个不能直接实例化的抽象基类,提供了它的派生画笔类所使用的功能,并且表示一个画笔图形对象,画笔用于采用特定的颜色填充图形的内部 |
Brushes | 该类使用所有的标准颜色来表示画笔,对于每种标准的颜色,这个类都有一个静态成员与之相对应,例如,Brushes.Blue表示一个蓝色的画笔 |
ColorConverter | 该类提供了将颜色从一种类型转换为另一种类型的方法和属性 |
ColorTranslator | 该类提供了将颜色从一种类型转换为另一种类型的各种方法 |
Font | 该类提供了定义字体文本的格式、名称、外观、字号和样式等的成员,还提供了从窗口句柄将Font对象创建到设备上下文或窗口句柄的方法 |
FontConverter | 该类提供了将字体从一种类型转换为另一种类型的成员 |
FontFamily | 该类定义了一组具有相似的基本设计但在样式上有所不同的字体 |
Graphics | 该类封装了绘制面的关键类,与许多其他的类一起提供了绘制和填充图形对象的成员 |
lcon | 该类表示一个Windows图标,提供了定义图标的大小、宽度和高度的成员 |
IconCOnverter | 该类提供了将Icon对象从一种类型装换为另一种类型的成员 |
Image | 该类提供了定义图像的大小、高度、宽度和格式的成员,还提供了从文件、窗口句柄或创建Image对象的方法,以及保存、旋转和翻转图像的方法,其还是一个抽象的基类,通过他的派生类(Bitmap、Icon和Metafile等)可以使用它的功能 |
ImageAnimator | 该类提供了启动和停止动画的方法,以及更新具有基于时间的帧的图像的帧的方法 |
ImageConverter | 该类提供了将Image对象从一中类型转换为另一种类型的成员 |
ImageFormatConverter | 该类定义了可以用将图像从一种格式转换为另一种格式的成员 |
pen | 该类定义了一个具有指定颜色和宽度的钢笔,钢笔用于绘制直线、矩形、曲线或椭圆等图形对象 |
PointConverter | 该类定义了可以用来将Point对象从一种类型转换为另一种类型的成员 |
RectangleConverter | 该类定义了可以用Rectangle对象从一种类型转换为另一种类型的成员 |
Region | 该类在GDI+中表示一个区域,此区域描述了一个图形的内部 |
SizeCOnverter | 该类定义了将字号从一种类型转换为另一种类型的成员 |
SolidBrush | 该类继承自Brush类,这个类定义了单一颜色的实心画笔 |
StringFormat | 该类提供了定义文本格式(包括对齐方式、去首尾空白和行间距、显示处理以及OpenType特性等)的成员 |
SystemBrushes | 该类定义了静态的属性,每个属性都是一个具有Highlight、HighlightText或ActiveBorder等,window优先显示元素的SolidBrush对象 |
SystemIcons | 该类定义了Windows系统图标的静态属性 |
SystemPens | 该类定义了静态的属性,每个属性都是一个具有Windows显示元素的颜色和宽度为1的Pen对象 |
TextureBrush | 该类继承自Brush类,定义了一个将图像作为纹理的画笔 |
ToolboxBitmapAttribute | 该类定义与特定组件关联的图像 |
8、System.Drawing.Design 名称空间
从其名字可以看出 ,System.Drawing.Design 名称空间提供了开发设计时控件 ( 例如自定义的工具箱项 、图形编辑器和类型转换器等) 的附加功能 。表 1.2 中简要地描述了System.Drawing.Design 名称空间中的类 。除表 1.2 中介绍的类之外,System.Drawing.Design 名称空间还定义了一些接口 、委托 和枚举 。表 1.3 列出了在此名称空间中定义的接口 。
表 1.2 System.Drawing.Design 类
类 | 描述 |
---|---|
BitmapEditor | 该类是使用 “属性” 窗口选择位图的用户界面 |
CategoryN田neCollection | 该类是类别的集合 |
FontEditor | 该类是选择和配置字体的 UI |
ImageEditor | 该类是在属性窗口中选择图像的UI |
PaintValueEventArgs | 该类提供了 PaintValue 事件的数据 |
PropertyValue UIItem | 该类提供了有关属性的属性值 UI 的信息 |
ToolboxComponentsCreatedEventArgs | 该类提供了 ComponentsCreated 事件的数据 ,此事件在向工具箱添加组件时发生 |
ToolboxComponentsCreatingEventArgs | 该类提供了 ComponentsCreating 事件的数据 ,此事件在向工具箱添加组件时发生 |
Toolboxltem | 该类提供了工具箱项的一个基本的实现 |
ToolboxltemCollection | 该类是工具箱 页的集合 |
UITypeEditor | 该类提供了可以用来设计值编辑器的基类 |
9 System.Drawing.Drawing2D 名称空间
System.Drawing.Drawing2D 名称空间定义了开发高级的二维和矢量图形应用程序的功 能。此名称雪间提供了图形容器 、混合、高级画笔 、矩阵和变形等的类 。表 1.4 简要地描 述了这些类 。除表 1.4 中介绍的类之外System.Drawing.Drawing2D 名称空间还提供了许多枚举 。 我们将在后面章节的例子中使用这些枚举时再对其进行介绍 。
表 1.4 System.Drawing.Drawing2D 类
类 | 描 述 |
---|---|
AdjustableArrowCap | 该类表示一个可调整的箭头形状的线帽 ,提供了定义要填写的属性以及设置箭头线帽的高度和 宽度的成员 |
Blend | 渐变色混合用于提供图形内部的光滑和阴影 ,混合图案包含系数和图案数组 ,这些数组定义了开 始颜色和结束颜色的位置以及颜色的百分比 c Blend 类定义了 个混合图案 ,其使用 Linear GradientBrush 来填充图形 。Factors 和 Positions 属性分别表示混合系数的数组和渐变位置的数组 |
ColorBlend | 该类定义了在多色渐变中混合的颜色 ,Color 和 Position 属性分别表示颜色数组和位置数组 |
CustomLineCap | 该类封装了一个定制的 、用户自定义的线帽 |
GraphicsContainer | 该类表示图形容器的数据 |
Graphics.BeginContainer | 以及通过对 Graphics.End- Container 的调用创建的 |
GraphicsPath | 在 GDI+ 中,路径是 系列相互连接的直线和曲线 。这个类提供了定义路径的填充模式的属性 和其他属性 。该类还定义了向路径添加图形的方法 。例如AddArc 方法和 AddCurve 方法将分 别向路径添加困弧和曲线 z 一些相关的方法如 Wrap、Transform 、Reverse 和 Reset 等 |
GraphicsPathlterator | 路径可以包含子路径 。该类提供了找到子路径的个数并通过子路径进行迭代的能力 。Count 和SubpathCount 分别返回了路径中的点的个数和子路径的个数 |
Graphics State | 该类表示 Graphics 对象的状态 |
HatchBrush | 阴影画笔是具有阴影样式 、前景色和背景色的画笔 。该类表示 GDI+ 中的阴影画笔 |
LinearGradientBrush | 该类表示使用线性渐变的画笔 |
Matrix | 该类封装了一个表示几何变形的 3×3 矩阵。该类定义了反转 、增加、重置 、旋转、缩放、剪切 和转化矩阵的方法 |
PathData | 该类包含形式为组成路径的点和类型的数据 。这个类的 Points 属性表示 个点的数组 ,Types属性表示路径中的点的类型 |
PathGradientBrush | 该类表示使用图形路径的画笔 。PathGradientBrush 包含混合 、包装、缩放和变形的方法和属性 。 该类封装 r 个使用渐变色填充 |
GraphicsPath | 对象的内部的 Brush 对象 |
RegionData | 该类表示由 Region 对象存储的数据 。这个类的 Data 属性表示形式为字节数组的数据 |
10 System.Drawing.Imaging 名称空间
System.Drawing 名称空间中定义了基本的图像处理功能 。System.Drawing.Imaging 名 称空间则提供了高级图像处理的功能 。在应用程序使用 System.Drawing.Imaging 名称空间 中的类之前,必须先引用此名称空间 。
表 1.5 简要地描述了 System.Drawing.Imaging 名称空间的类 。这些类及其用法将在第 8章中进行介绍。
表 1.5 System.Drawing.Imaging 类
类 | 描述 |
---|---|
BitmapData | 通常我们不希望加载和刷新位图的所有数据 ,这是因为渲染每个像素不仅是一个非常慢的过程 , 而且会消耗很多的系统资源 。由于有BitmapData 类以及它的LockBits 和 UnlockBits 方法的帮助 , 我们可以锁定内存中所需的位图数据并对其进行操作 ,而不用对所有的数据进行操作 |
ColorMap | 该类定义了颜色转换的映射 。ColorMap 由ImageAttributes 类使用 |
ColorMatrix | 该类定义了包含 ARGB 空间的坐标的 5×5 矩阵。ColorMatrix 由geAttributes 类使用 |
ColorPalette | 该类定义了 个组成颜色调色板的颜色的数组 |
ColorPalette | 由ImageAttribut的类使用 Encoder 该类表示一个编码器 ,此编码器表示一个标识图像编码器参数的全局惟→标识符 <GUID )。 |
Encoder | 由EncoderPararneter类使用Encoder Parameter该类是一个编码器参数 ,用于设置特定种类的图像的值 。该类在 Save 方法中是与EncoderParameter写 一起使用的 |
Encoder Parameters | 该类是 Encoder Parameter 对象的数组 |
FrameDimension | 该类提供了获取图像的帧尺寸的属性 |
ImageAttributes | 该类包含了有关在渲染期间如何操作图像颜色的信息 ( 详细信息请参见第 7章) |
ImageCodecinfo | 该类检索有关己安装的图像编解码器的信息 |
ImageFormat | 该类指定了图像的格式 |
Metafile | 该类定义了 个图形图元文件 ,此文件包含形式为可以记录(构造) 和回放 (显示) 的记录的 图形操作 |
11 System.Drawing.Printing 名称空间
System.Drawing.Printing 名称空间定义了 GDI+ 中与打印相关的类和类型 。在应用程序 使用此名称空间的类之前 ,必须先包含这个名称空间 。
表 1.6 简要地讨论了 System.Drawing.Printing 名称空间所提供的类 。这些类及其用法 将在第 11 章中进行介绍。
12 System.Drawing.Text 名称空间
System.Drawing.Text 名称空间只包含一些与高级 GDI+ 版式功能相关的类 。在应用 程序使用此名称空间的类之前 ,必须先包含这个名称空间 。表 1.7 描述了这些类 :在第 5 章中将对这些类进行详细的介绍 。
(说明:以上内容来自:《GDI+图形程序设计》)