Windows Form绘图类及其简介
什么是GDI+ GDI(Graphicsal Device Interface):把选中的项目放到设备环境(device context)对象上的一种状态模型(GDI的目的:把硬件的功能抽象到一个相对高级的API中),所有的绘图工作都必须通过设备环境来完成 GDI+ :无状态的模型,是GDI的一个包装,每个绘图操作都是独立的。保留了设备环境,包装在Graphics
Namespace System.Drawing System.Drawing.Drawing2D System.Drawing.Imaging System.Drawing.Text System.Drawing.Printing
重要类-Graphics(一) Graphics:大部分的绘图工作都要通过它完成。相当于是GDI保留下来的设备环境(DC)。 1、在OnPaint事件中使用: Portected override void OnPaint(PaintEventArgs pea){ Graphics grfx = pea.Graphics; }
重要类-Graphics(二) 2、在其它情况下使用 Graphics grfx = this.CreateGraphics(); 常用方法: DrawArc:绘制圆弧 DrawBezier:绘制贝塞尔曲线 DrawBeziers:绘制贝塞尔曲线组 DrawClosedCurve:绘制封闭曲线 DrawCurve:绘制曲线 DrawEllipse:绘制椭圆
创建Graphics对象 Demo 1
重要类-Graphics(三) DrawIcon:绘制图标 DrawImage:绘制图象 DrawLine:绘制直线 DrawLines:绘制直线组 DrawPie,DrawPolygon,DrawRectangle……
Graphics 中的DrawXXX()方法 Demo 2
重要类-Graphics(四) Graphics对象绘制实心图形方法 FillEllipse:封闭实心椭圆 FillPie:绘制实心圆饼 FillPolygon:绘制实心多边形 ……
Graphics中的FillXXX()方法 Demo 3
常用类 画刷(Brush):填充 画笔(Pen):绘制各种直线和曲线 图像(Image): 字体(Font): 位图(Bitmap 光栅图片)、元文件(Metafile 矢量图片,可以缩放而不损失清晰度,元文件将一幅图片描述为一个图形函数调用的集合,因此它们通常占用很少的空间,相对于位图而言,更加设备无关性 *.wmf(16位元文件) *.emf(32bit))
演示各种Brush之间的区别 Demo 4
常用结构 颜色(Color)、大小(Size&SizeF)、 点( Point&PointF )、
常见图形 多边形(Polygon)、矩形( Rectangle&RectangleF )、 椭圆(Ellipse)、贝塞尔曲线(Bezier)、直线(Line)、
Form相关属性 ClientSize:客户区大小,在许多应用程序中,客户区域就是有白色背景的区域 Anchor:锚点 Size:Form的大小
重要方法 OnPaint Invalidate
Invalidate()方法的使用 Demo 5
颜色 请问计算机世界里有多少种颜色 创建:Color clr = Color.White; Color clr = Color.FromArgb(200,0,255); Color clr = Color.FromName(“White”); 红(R)、绿(G)、蓝(B)三原色,256*256*256 = 2^24>1600万
GDI+的三种坐标空间 世界坐标:对应于GDI中的逻辑坐标,与设备无关。定义为:带有小圆的圆心为原点o, x轴水平向右,y轴向下,z由右手法则确定 页面坐标:类似于设备坐标,测量单位是像素 设备坐标:测量单位是用户通过调用Graphics.PageUnit属性制定的单位,默认为像素(Pixel),还可以是英寸(Inch)和毫米(Millimeter)
贝塞尔艺术作品(一) 使用贝塞尔曲线创建的有趣的设计和样式(通常涉及for循环) 贝塞尔曲线的有趣之处更在于它的“皮筋效应”也就是说,随着点有规律地移动,曲线将产生皮筋伸引一样的变换,带来视觉上的冲击 Graphics.DrawBezier()
贝塞尔艺术作品(二)
贝塞尔艺术作品展 Demo 6
.NET的不足 C#不是一门性能很高的语言,不是为追求性能而设计 图像处理本身性能要求高、如果反应不及时,系统就忙不过来
.NET的绘图性能不足演示 Demo 7
补充:双缓冲 可以这样理解:把电脑屏幕看作一块黑板。首先我们在内存环境中建立一个“虚拟“的黑板,然后在这块黑板上绘制复杂的图形,等图形全部绘制完毕的时候,再一次性的把内存中绘制好的图形“拷贝”到另一块黑板(屏幕)上。采取这种方法可以提高绘图速度,极大的改善绘图效果。 一种使用两个缓冲区的方法,一个用于显示,另一个用于涂色描绘。在其中一个缓冲区用于显示时,另一个缓冲区通过一个涂色描绘引擎操作。当一帧新的帧图面描绘完成后,两个缓冲区交换。因此观看者总能看到完美的图像。
双缓冲示例 Demo 8