C#学习笔记:GDI图形高级编程(1)——如何将图形画到控件上

之前学习OpenGL是用C语言写的程序,开发个界面,既繁琐又不美观,还一大堆BUG。现在学了C#,可以很轻易地进行界面开发,我就寻思着,怎么样把OpenGL搬到C#中。查了很多资料,得出了这样一个结论:OpenGL官方没有为C#语言提供OpenGL API接口,而视OpenGL为死对头的微软更不可能在自家的语言上为OpenGL提供支持。只有第三方做了一些适合在C#上使用的OpenGL接口,比如CsGL,CsOpenGL等,然而这些第三方的图形接口很老了,很久没有维护了,OpenGL都出到4.2以上了,而它们最新的版本还在1.4。版本老一点,能用就行,毕竟不会期待着在C#做一些特别炫酷的三维图形,可是也许是Windows系统的问题,抑或是.net framework 版本的问题,在使用CsGL的时候,总是出现一些很奇妙的问题。心里一千头羊驼飞过!我可能得花大量的时间去解决这些问题(以我的能力,无解都不一定)。心灰意冷,内心咒骂额微软N多遍。学微软家的图形接口D3D吧!麻烦。想想还是用C#自带的GDI图形接口吧,虽然功能有限,但还是可以用的,不至于出现很多乱七八糟的事情。下面进入正题(内心是多么不情愿才会才会在前面写了一堆废话啊)。


GDI是什么鬼就不啰嗦了,网上很多很好的说法。不管原理,还是直接用吧。那么如何将图形画出来呢?对于一个画家而言,要绘画,首先得准备一块画布,除此之外至少还得有画笔画刷什么的。下面将简述一下绘图的步骤。

一、引用名称空间

GDI的相关类、方法都定义在System.Drawing这个名称空间里面。在使用GDI图形接口的代码页面上加上一下代码:

	Using System.Drawing;

、创建 Graphics 对象

为什么要创建 Graphics 对象呢?因为要画图的画,就要考虑往哪个控件上画,这个Graphics对象就相当于画布。大部分可视的控件都可以作为画布,比如Form控件、PictureBox控件、Label控件、Button控件、TextBox控件,甚至是CheckedBox控件都可以作为画布。选择哪个控件作为画布,还需要用到CreateGraphics方法。下面是创建Graphics对象的一些例子:

Graphics  g;//创建一个图形对象
g=this.CreateGraphics()//将图形画在窗体上
g=pictureBox1.CreateGraphics()//将图形画在PictureBox控件上
g=label1.CreateGraphics()//将图形画在Label控件上
g=checkedBox1.CreateGraphics()//将图形画在CheckedBox控件上

三、设置钢笔(Pen)或画刷(Brush)

选好画布还不能干点什么,还要设置画笔或者画刷才能画图。画笔(Pen)用来画图形的轮廓,画刷(Brush)是用某种颜色来填充图形,如果不填充颜色,可以不用画刷。

(1)设置画笔(Pen)

设置画笔就要用到一个Pen类,该类的作用就是设置绘图画笔的颜色和笔触的大小。

Color color=Color.FromArgb(255,0,0);//颜色为红色
Pen p=new Pen(color,3);//创建一个画笔对象,该画笔的颜色为红色,笔触大小为3个像素
(2)设置画刷(Brush)
画刷的作用就是填充图形以颜色,需要用到Brush类,GDI的Brush类本身是抽象类,不能直接实例化,所以GDI API 提供了一下五个类,来扩展Brush,并提供了具体的实现,如下:

说明
SolidBrush 用纯色填充图形
TextureBrush 用基于光栅的图像(位图、Jpg等)填充图形
LinearGradientBrush 用颜色渐变填充图形,颜色渐变是指一种颜色沿着指定的方向或在两个指定(平行)的边界线之间逐渐变为另一种暗色
PathGradientBrush 用渐变的效果填充图形,渐变的方向是从由路径定义的图形边界指向图形的中心。
HatchBrush 用各种图案填充图形

下面是一些例子:

Brush brush;//创建一个画刷
brush=new SolidBrush(Color.FromArgb(255,0,0));//设置画刷的颜色为红色
Bitmap map=new Bitmap("01.jpg");//载入一张图片
brush=new TextureBrush(map);//用图片填充图形

四、选择要画的图形

GDI提供了很多画图的方法,挑几个常用的提一下:

(1)画图形的轮廓

DrawArc:绘制一段弧线。

DrawElipse:绘制椭圆。

DrawLine:绘制直线。

DrawPie:绘制扇形。

DrawPolygon:绘制多边形。

DrawRectangle:绘制矩形。

DrawString:绘制字符串。

    。。。。。。

(2)填充图形

FillElipse:填充椭圆。

FillPie:填充扇形。

FillPolygon:填充多边形。

。。。。。。

五、实例

在窗体上放一个Button控件和一个PictureBox控件,然后Button控件上画一个红色的圆,不填充;在PictureBox控件上画红色轮廓的椭圆,然后用绿色填充。运行时双击窗体,开始绘制图形。其代码和运行效果图下图所示:

运行时,双击窗体,效果如下:



展开阅读全文

没有更多推荐了,返回首页