《C#入门经典(中文第四版)》第18章:图形图像程序设计
---------------------------------------------------------------------------------------------------------
●·● 目录:
System.Drawing 命名空间
A1 ………… Color 结构
A2 ………… KnownColor 枚举
A3 ………… SystemColor 类
A4 ………… SystemBrushes 类
A5 ………… SystemFonts 类
A6 ………… SystemIcons 类
A7 ………… SystemPens 类
A8 ………… TextureBrush 类
A9 ………… Font 类
G1 ………… FontFamily 类
G2 ………… Point 结构
G3 ………… Size 结构
G4 ………… Rectangle 结构
G5 ………… Pen 类
G6 ………… Pens 类
G7 ………… Graphics 类
G8 ………… Image 类
G9 ………… Brushes 类
U1 ………… SolidBrushes 类
U2 ………… ColorTranslator 类
System.Drawing.Drawing2D 命名空间
U2 ………… GraphicsPath 类
U3 ………… AjustableArrowCap 类
U4 ………… HatchBrush 类
U5 ………… LinearGradientBrush 类
System.Drawing.Text 命名空间
U6 ………… InstalledFontCollection 类
---------------------------------------------------------------------------------------------------------
System.Drawing 命名空间
System.Drawing 命名空间提供了对 GDI+ 基本图形功能的访问。
---------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第A1个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● Color 结构:
1. 表示一种 ARGB 颜色(alpha、红色、绿色、蓝色)。
2. Color属性:
3. Color 方法:
- FromArgb(Int32, Int32, Int32):从指定的 8 位颜色值(红色、绿色和蓝色)创建 Color 结构。
- FromArgb(Int32, Int32, Int32, Int32):alpha表示透明度。第一个参数为alpha。
- FromArgb(Int32, Color):从指定的 Color 结构创建 Color 结构,但要使用新指定的 alpha 值。
- FromKnownColor(KnownColor color):基于指定的预定义颜色创建 Color 结构。
- KnownColor:指定已知的系统颜色。
4. Color 运算符:
- Equality:测试两个指定的 Color 结构是否等效。“ == ”
- Inequality:测试两个指定的 Color 结构是否不同。“ != ”
private void Button1_Click(System.Object sender, System.EventArgs e)
{
if (this.BackColor == SystemColors.ControlDark)
{
this.BackColor = SystemColors.Control;
}
}
---------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第A2个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● KnownColor 枚举:
1. 指定已知的系统颜色。
2. KnownColor 属性:
- Desktop:桌面的系统定义颜色。
- Window:窗口的工作区中背景的系统定义颜色。
- Transparent:系统定义的颜色。
---------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第A3个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● SystemColors 类:
1. SystemColors 类的每个属性都是 Color 结构,这种结构是 Windows 显示元素的颜色。
2. SystemColors 属性:
---------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第A4个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● SystemBrushes 类:
1. SystemBrushes 类的每个属性都是一个 SolidBrush,它是 Windows 显示元素的颜色。
2. SystemBrushes 属性:
- ActiveBorder:获取 SolidBrush,它是活动窗口边框的颜色。【静态】
- ButtonShadow:获取 SolidBrush,它是三维元素的阴影颜色。 【静态】
---------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第A5个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● SystemFonts 类:
1. 指定用于在 Windows 显示元素中显示文本的字体。
2. SystemFonts 属性:
- CaptionFont:获取一个用于在窗口标题栏中显示文本的 Font。【静态】
- DefaultFont:获取应用程序可用于对话框和窗体的默认字体。【静态】
---------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第A6个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● SystemIcons 类:
1. SystemIcons 类的每个属性都是 Windows 系统级图标的 Icon 对象。无法继承此类。
2. SystemIcons 属性:
- Asterisk:获取 Icon 对象,它包含系统星号图标 (WIN32: IDI_ASTERISK)。【静态】
- Error:获取 Icon 对象,它包含系统错误图标 (WIN32: IDI_ERROR)。【静态】
---------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第A7个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● SystemPens 类:
1. SystemPens 类的每个属性都是一个 Pen,它是 Windows 显示元素的颜色,宽度为 1 个像素。
2. SystemPens 属性:
---------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第A8个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● TextureBrush 类:
1. TextureBrush 类的每个属性都是 Brush 对象,这种对象使用图像来填充形状的内部。无法继承此类。
2. Texture 构造函数:
- TextureBrush(Image):获取或设置 WrapMode 枚举,它指示此 TextureBrush 对象的换行模式。
- TextureBrush(Image, WrapMode):初始化使用指定的图像和自动换行模式的新 TextureBrush 对象。
- TextureBrush(Image, Rectangle):初始化使用指定图像和边框的新 TextureBrush 对象。
- TextureBrush(Image, WrapMode, Rectangle):初始化使用指定图像、自动换行模式和边框的新 TextureBrush 对象。
3. Texture 属性:
- Image:获取与此 TextureBrush 对象关联的 Image 对象。
- Transform:获取或设置 Matrix 对象的副本,该对象为与此 TextureBrush 对象关联的图像定义局部几何变换。
- WrapMode:获取或设置 WrapMode 枚举,它指示此 TextureBrush 对象的换行模式。
4. Texture 方法:
- ResetTransform:将此 TextureBrush 对象的 Transform 属性重置为单位矩阵。
- RotateTransform:将此 TextureBrush 对象的局部几何变换旋转指定的角度。此方法将旋转添加到变换前。
- ScaleTransform:将此 TextureBrush 对象的局部几何变换缩放指定的倍数。此方法将缩放矩阵添加到变换前。
---------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第A9个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● Font 类:
1. 定义特定的文本格式,包括字体、字号和字形属性。无法继承此类。
2. Font 构造函数:
- Font(Font, FontStyle): 初始化新 Font,它使用指定的现有 Font 和 FontStyle 枚举。
Font font = new Font(label1.Font, FontStyle.Bold); //在原字体基础上加宽
label1.Font = font;
- Font(FontFamily, Single): 使用指定的大小初始化新 Font。
FontFamily ff = new FontFamily("微软雅黑");
Font font = new Font(ff, 20f);
label1.Font = font; - Font(String, Single):使用指定的大小初始化新 Font。
Font font = new Font("微软简中圆", 40f);
label1.Font = font; - Font(FontFamily, Single, FontStyle): 使用指定的大小和样式初始化新 Font。
FontFamily ff = new FontFamily("微软简中圆");
Font font = new Font(ff, 40f, FontStyle.Italic);
label1.Font = font; - Font(String, Single, FontStyle): 使用指定的大小和样式初始化新 Font。
Font font = new Font("微软简中圆", 40f, FontStyle.Bold);
label1.Font = font;
3. Font 属性:
- Bold:获取一个值,该值指示此 Font 是否为粗体。
- FontFamily:获取与此 Font 关联的 FontFamily。
- Height:获取此字体的行距。
- Italic:获取一个值,该值指示此 Font 是否为斜体。
- Name:获取此 Font 的字体名称。
- Size:获取此 Font 的全身大小,单位采用 Unit 属性指定的单位。
- Strikeout:获取一个值,该值指示此 Font 是否指定贯穿字体的横线。
- Underline:获取一个值,该值指示此 Font 是否有下划线。
- Style:获取此 Font 的样式信息。(返回FontStyle)
---------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第G1个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● FontFamily 类:
1. 定义有着相似的基本设计但在形式上有某些差异的一组字样。无法继承此类。
2. FontFamily 构造函数:
- FontFamily(String):用指定的名称初始化新 FontFamily。
3. FontFamily 属性:
- Families:返回一个数组,该数组包含与当前图形上下文相关的所有 FontFamily 对象。【静态】
4. FontFamily 方法:
- GetFamilies:返回一个数组,该数组包含指定的图形上下文可用的所有 FontFamily 对象。【静态】
---------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第G2个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● Point 结构:
1. 表示在二维平面中定义点的、整数 X 和 Y 坐标的有序对。(远离左边的距离,远离上边的距离)
2. Point 属性:
- IsEmpty:
- X:
- Y:
3. Point 方法:
- Add(Point p, Size z):将指定的 Size 添加到指定的 Point。【静态】
- Ceiling(PointF pf):通过将 PointF 的值舍入到与其接近的较大整数值,将指定的 PointF 转换为 Point。【静态】
- Round(PointF pf):通过将 Point 值舍入到最接近的整数值,将指定的 PointF 转换为 Point 对象。【静态】
- Subtract(Point p, Size z):返回从指定的 Point 减去指定的 Size 之后的结果。【静态】
- Truncate(PointF pf):通过截断 Point 值,将指定的 PointF 转换为 Point。【静态】
4. Point 运算符:
- Addition:将 Point 平移给定 Size。
Point endPoint = startPoint + new Size(140, 150);
- Equality:比较两个 Point 对象。此结果指定两个 Point 对象的 X 和 Y 属性的值是否相等。
if (Point1 == Point2)
{
} - Subtraction:将 Point 平移给定 Size 的负数。
- Inequality: 比较两个 Point 对象。 此结果指定两个 Point 对象的 X 或 Y 属性的值是否不等。
- Narrowing(Point to Size):将指定的 Point 结构转换为 Size 结构。(强制类型转换)
- Widening(Point to PointF):将指定的 Point 结构转换为 PointF 结构。(强制类型转换)
---------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第G3个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● Size 结构:
1. 存储一个有序整数对,它指定 Height 和 Width。
2. Size 构造函数:
- Size(Point):
- Size(Int32, Int32):
3. Point 属性:
- Height:
- IsEmpty:
- Width:
4. Point 方法:
- Add(s):将一个 Size 结构的宽度和高度与另一个 Size 结构的宽度和高度相加。
- Ceiling(s):
- Round(s):
- Subtract(s):
- Truncate(s):
---------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第G4个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● Rectangle 结构:
1. 存储一组整数,共四个,表示一个矩形的位置和大小
2. Rectangle 构造函数:
- Rectangle(Point, Size)
- Rectangle(Int32, Int32, Int32, Int32)
3. Rectangle 属性:
- Bottom
- Height
- Left
- Location:获取或设置此 Rectangle 结构左上角的坐标。
- Right:获取 x 坐标,该坐标是此 Rectangle 结构的 X 与 Width 属性值之和。
- Size:获取或设置此 Rectangle 的大小。
- Top:获取此 Rectangle 结构上边缘的 y 坐标。
- Width
- X
- Y
---------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第G5个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● Pen 类:
1. 定义用于绘制直线和曲线的对象。 此类不能被继承。
2. Pen 构造函数:
- Pen(Brush):使用Brushes调颜色。
- Pen(Color):使用Color调颜色。
- Pen(Brush, Single):改变粗细。
- Pen(Color, Single):
3. Pen 属性:
- DashStyle:获取或设置用于通过此 Pen 绘制的虚线的样式。(通过属性修改样式)
枚举:Solid,Dash,Dot,DashDot,DashDotDot - StartCap:获取或设置要在通过此 Pen 绘制的直线起点使用的线帽样式。
- EndCap:获取或设置在通过此 Pen 绘制的直线终点使用的线帽样式。
LineCap枚举:ArrowAnchor - CustomStartCap:获取或设置要在通过此 Pen 绘制的直线起点使用的自定义线帽。
- CustomEndCap:获取或设置要在通过此 Pen 绘制的直线终点使用的自定义线帽。
- Width:
- Color:
4. Pen 方法:
- Dispose:释放由 Graphics 使用的所有资源。
---------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第G6个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● Pens 类:
1. 所有标准颜色的钢笔。无法继承此类。
2. Pens 属性:
- AliceBlue:系统定义的宽度为 1 的 Pen 对象。
※ Pens属性返回的是Pen类的实例,可以直接当做画笔来用。
---------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第G7个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● Graphic 类:
1. 封装一个 GDI+ 绘图图面。 此类不能被继承。
2. Graphic 方法:
- Clear:清除整个绘图面并以指定背景色填充。
- Dispose:释放由 Graphics 使用的所有资源。
- DrawPath:绘制 GraphicsPath。
- DrawArc(Pen, Rectangle, Single, Single):绘制一段弧线,它表示 Rectangle 结构指定的椭圆的一部分。
- DrawCurve(Pen, Point()):绘制经过一组指定的 Point 结构的基数样条。(Point数组)
- DrawCurve(Pen, Point(), Single):使用指定的张力绘制经过一组指定的 Point 结构的基数样条。
View Code - 举例
1 Graphics g = e.Graphics;
2 Pen p = new Pen((Color.Magenta),2);
3 Point p1 = new Point(0,100);
4 Point p15 = new Point(50, 0);
5 Point p2 = new Point(100,100);
6 Point p3 = new Point(110,200);
7 Point[] ps = new Point[]{p1,p15,p2,p3};
8 Point[] ps2 = { p1, p15, p2, p3 ,new Point(200,240)};
9 g.DrawCurve(p,ps2); - DrawEllipse(Pen, Rectangle):绘制边界 Rectangle 结构指定的椭圆。
- DrawEllipse(Pen, Int32, Int32, Int32, Int32):绘制一个由边框定义的椭圆,该边框由矩形的左上角坐标、高度和宽度指定。
- DrawBezier(pen, Point, Point, Point, Point):起始点,控制点1,控制点2,结束点。
- DrawLine(Pen, Point, Point):
用极坐标实现通过半径 r 和角度 angle 转换成直角坐标。
╔ x = r*cos(θ)
╚ y = r*sin(θ)
private PointF PolarCoordinate(float r, float angle, int mX, int mY)
{
float x = (Single)(r * Math.Cos(angle * Math.PI / 180)); //给 x 赋值
float y = (Single)(r * Math.Sin(angle * Math.PI / 180)); //给 y 赋值
PointF newP = new PointF(x + mX, y + mY); //给 x 和 y 进行移动,极坐标以原点来算的~
return newP; //返回一个直角坐标系的点
} - DrawLine(Pen, Int32, Int32, Int32, Int32):
- DrawLines(Pen, Point()):绘制一系列连接一组 Point 结构的线段。
- DrawPie(Pen, Rectangle, Single, Single):绘制由一个 Rectangle 结构和两条射线所指定的椭圆定义的扇形。
- DrawPolygon(Pen, Point()):绘制由一组 Point 结构定义的多边形。
- DrawRectangle(Pen, Rectangle):绘制由 Rectangle 结构指定的矩形。
- DrawRectangle(Pen, Rectangle()):绘制一系列由 Rectangle 结构指定的矩形。
- DrawString(String, Font, Brush, PointF):在指定位置并且用指定的 Brush 和 Font 对象绘制指定的文本字符串。
- FillClosedCurve(Brush, Point()):(可以单独显示,继续Fill,继续显示,但是Draw不可以)
- FillEllipse(Brush, Rectangle):
- FillPie(Brush, Rectangle, Single, Single):
- FillPolygon(Brush, Point()):
- FillRectangle(Brush, Rectangle):
- FillRectangles(Brush, Rctangles):
- RotateTransform(Single):将指定旋转应用于此 Graphics 的变换矩阵。
---------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第G8个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● Image 类:
1. 为源自 Bitmap 和 Metafile 的类提供功能的抽象基类。
2. Image 属性:
- Size:获取此图像的以像素为单位的宽度和高度。
3. Image 方法:
- FromFile(String):从指定的文件创建 Image。
pictureBox1.Image = Image.FromFile("1.jpg");
pictureBox1.SizeMode = PictureBoxSizeMode.Zoom;
//只有当图片放在 bin\Debug 文件夹中才可以直接写名称!
---------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第G9个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● Brushes 类:
1. 所有标准颜色的画笔。无法继承此类。
2. Brushes 属性:
- AliceBlue:获取系统定义的 Brush 对象。【静态】
Graphics g = e.Graphics;
g.FillRectangle(Brushes.Blue, new Rectangle(10, 10, 100, 100));
※ 每一个静态的属性都是一个Brush对象,因此就可以作为填充的颜色。
---------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第U1个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● SolidBrush 类:
1. 初始化指定颜色的新 SolidBrush 对象。
2. SolidBrush 构造函数:SolidBrush(Color color)
3. SolidBrush 属性:Color
g.FillRectangle(new SolidBrush(Color.FromArgb(50,Color.Red)),
new Rectangle(textBox1.Left + 5, textBox1.Top + 5, textBox1.Width, textBox1.Height)); //给文本框加上阴影
---------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第U2个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● ColorTranslator 类:
1. 将颜色翻译成 GDI+ Color 结构并从该结构翻译颜色。 此类不能被继承。
2. ColorTranslator 方法:
- FromHtml:将 HTML 颜色表示形式翻译成 GDI+ Color 结构。
- FromOle:将 OLE 颜色值翻译成 GDI+ Color 结构。
- FromWin32:将 Windows 颜色值翻译成 GDI+ Color 结构。
- ToHtml:将指定的 Color 结构翻译成 HTML 字符串颜色表示形式。
- ToOle:将指定的 Color 结构翻译成 OLE 颜色。
- ToWin32:将指定的 Color 结构翻译成 Windows 颜色。
备注:Ole - Object Linking and Embedding,对象连接与嵌入,简称 OLE 技术。
---------------------------------------------------------------------------------------------------------
System.Drawing.Drawing2D 命名空间
System.Drawing.Drawing2D 命名空间提供高级的二维和矢量图形功能。
---------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第U2个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● GraphicsPath 类:
1. 表示一系列相互连接的直线和曲线。 此类不能被继承。
2. GraphicsPath 方法:
- AddArc(Rectangle, Single, Single):想当前图形追加一段椭圆弧。
- AddBezier(Point, Point, Point, Point)
- AddClosedCurve(Point())
- AddCurve(Point())
- AddEllipse(Rectangle)
- AddLine(Point, Point)
- AddPath
- AddPie(Rectangle, Single, Single)
- AddPolygon(Point())
- AddRectangle(Rectangle)
View Code - 举例
Graphics g = this.CreateGraphics();
GraphicsPath gp = new GraphicsPath();
Pen p = new Pen(Color.Black, 1);
p.DashStyle = DashStyle.Dash;
for (int i = 10; i <= 200; i += 10)
{
Rectangle r = new Rectangle(220-i, 220-i, 2*i, 2*i);
gp.AddRectangle(r);
}
g.DrawPath(p, gp);
g.Dispose();
gp.Dispose(); - AddString(String, FontFamily, Int32, Single, Point, StringFormat)
---------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第U3个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● AdjustableArrowCap 类:
1. 表示可调整的箭头形状的线帽。 此类不能被继承。
2. AjustableArrowCap 构造函数:
- AjustableArrowCap(Single, Single): 使用指定的宽度和高度初始化 AdjustableArrowCap 类的新实例。 始终填充用此构造函数创建的箭头端帽。
- AjustableArrowCap(Single, Single, Boolean): 使用指定的宽度、高度和填充属性初始化AdjustableArrowCap 类的新实例。 箭头端帽是否填充取决于传递给 isFilled 参数的参数。
AdjustableArrowCap lineCap = new AdjustableArrowCap(6, 6, false);
Pen RedPen=new Pen(Color.Red,2);
RedPen.CustomEndCap = lineCap;
CreateGraphics().DrawLine(RedPen,new Point(0, 0), new Point(100, 150));
---------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第U4个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● HatchBrush 类:
1. 用阴影样式、前景色和背景色定义矩形画笔。 此类不能被继承。
2. HatchBrush 构造函数:
- HatchBrush(HatchStyle, Color):样式和前景色。
- HatchBrush(HatchStyle, Color, Color):样式、前景色和背景色。
View Code - 遍历HatchStyle样式
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Drawing2D;
namespace _18_8
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
static int count = 0;
private void button1_Click(object sender, EventArgs e)
{
count++;
Graphics g = this.CreateGraphics();
g.Clear(this.BackColor);
Brush sp = new HatchBrush((HatchStyle)count, Color.White);
g.FillPie(sp, 50, 10, 200, 150, 90, 270);
g.Dispose();
sp.Dispose();
label1.Text = ((HatchStyle)count).ToString();
if (count == 52)
{
count = 0;
}
}
}
}
---------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第U5个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● LinearGradientBrush 类:
1. 使用线性渐变封装 Brush。 此类不能被继承。
2. LinearGradientBrush 构造函数:
- LinearGradientBrush(Point, Point, Color, Color):与连线垂直。
- LinearGradientBrush(Rectangle, Color, Color, Single):矩形,起始颜色,结束颜色以及方向。
- LinearGradientBrush(Rectangle, Color, Color, LinearGradientMode):方向枚举。
释放由 Graphics 使用的所有资源。
---------------------------------------------------------------------------------------------------------
System.Drawing.Text 命名空间
System.Drawing.Text 命名空间提供高级 GDI+ 排版功能。
---------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第U6个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● InstalledFontCollection 类:
1. 表示安装在系统上的字体。 此类不能被继承。
2. InstalledFontCollection 属性:
- Families:获取与此 FontCollection 关联的 FontFamily 对象的数组。
System.Drawing.Text.InstalledFontCollection fonts = new System.Drawing.Text.InstalledFontCollection();
foreach (System.Drawing.FontFamily family in fonts.Families)
{
comboBox1.Items.Add(family.Name); //遍历所有安装的字体
}
comboBox1.Text = "微软雅黑";