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

posted on 2012-10-25 14:08  凡一二三  阅读(614)  评论(0)    收藏  举报