2.绘图表面
在编写GDI+代码时,得到的图形可以放在3个几本目标环境中:屏幕上的窗口(窗体)、发送到打印机上的页面、内存中的位图或图像。每个环境都有一个绘图表面:基于像素的窗体、图像或页面。每个绘图表面的定义特性都是相同的(尺寸、图像分辨率和颜色深度),但在不同环境中的这些特性的显示、控制方式则是不同的。
1.绘图表面概述
绘图表面是对屏幕上的窗口、打印机上的页面或内存中的图像的一种基于光栅的抽象。基于光栅:指界面是由放在二维网格中的像素组成。像素是绘制表面最小的单位,可以直接操作。使用一对坐标,以(x,y)的形式可以定位各个像素。

2.绘图表面的特性
任何绘图表面都有三个主要特性:界面的大小(宽度和高度),像素分辨率和颜色深度。
绘图界面的大小:绘图界面的大小是有绘图表面上水平像素和垂直像素的数量决定的。如上图水平像素为26,垂直像素为14。
绘图表面的分辨率:在GDI+中,绘图表面的分辨率总是用像素/英寸(PPI)或点/英寸(DPI)来表示。1英寸=2.54厘米,1024*768指一英寸的表面上,垂直768个像素点,水平有1024个像素点。
绘图表面的颜色深度:在GDI+中,每个像素都描述了一种颜色。颜色是由红、绿、蓝(RGB)三种成分构成的。
3.颜色结构
一:RGB
Color cc = Color.FromArgb(100,100,100);
二:按照名称引入预定义颜色
Color cc = Color.Red;
三:HSB模型,色调、饱和度、亮度
Color cc = Color.Blue; float h = cc.GetHue();//0-360 float s = cc.GetSaturation();//0-1 float b = cc.GetBrightness();//0-1
GDI+中的颜色还有一种成分,即Alpha成分,它可以用于控制颜色的透明度。Alpha成分由一个0到255之间的整数表示,0表示完全透明,255表示完全不透明。如果省略Alpha值,GDI+就使用默认值255.
private void Form1_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; g.FillRectangle(Brushes.White,ClientRectangle); //两个不同Alpha值的颜色 Color c1 = Color.FromArgb(100,Color.Blue); Color c2 = Color.FromArgb(50,Color.Green); //默认的透明度 g.FillEllipse(Brushes.Red,20,20,80,80); //c1 g.FillRectangle(new SolidBrush(c1),60,80,60,60); //c2 Point[] pa = new Point[] { new Point(150,40), new Point(90,40), new Point(90,120)}; g.FillPolygon(new SolidBrush(c2),pa); }

4.Windows Form的绘制表面

private void Form1_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; g.FillRectangle(Brushes.White,ClientRectangle); }
5.Graphics类
只要想在绘图表面上绘图,就必须有Graphics类的一个实例。获得Graphics对象的方式随目标环境(窗体、打印机或图像)的不同而不同。
为窗体创建Graphics对象:如果绘制一个窗体,以响应Pain事件,就要有一个Graphics对象。它是通过Paint事件处理程序的PaintEventArgs参数进行传送的。
private void Form1_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; }
如果响应其他事件,例如键盘或鼠标事件,就可以通过调用CreateGraphics方法,从窗体获得一个Graphics对象。
private void Form1_Load(object sender, EventArgs e) { Graphics g = CreateGraphics(); }
Graphics的属性和方法:http://msdn.microsoft.com/zh-cn/library/system.drawing.graphics.aspx
浙公网安备 33010602011771号