1、技能目标: 了解GDI+的基本原理 掌握Pen类、Brush类的用法 掌握Graphics类的用法,能使用Graphics绘制各种基本图形 掌握“简单画图板”程序功能的实现方法 能结合鼠标事件,控制图形的绘制 熟练掌握如何执行绘制形状、绘制文本或显示图像等任务,第四部分 图形图像处理 第七章 简单画图板程序设计,1,图形图像处理是软件技术当中的重要内容。Windows操作系统的图形界面就是建立在图形绘制基础之上。 常用的图像制作与处理软件有Photoshop、Fireworks、金山画笔、Windows自带的画图等,图片浏览软件常用的有ACDSee、Windows图片查看器、Microsoft
2、 Office Picture Manager等;常用的抓图软件有HyperSnap、HyperCam等,如图 71所示,就是一个Windows自带的“画图”软件。,教学情景导入,2,情景描述制作简易画图板,3,界面总体设计 菜单设计,实战引导一步步完成简易画图板,4,界面总体设计 状态栏,实战引导一步步完成简易画图板,5,界面总体设计 总体布局,实战引导一步步完成简易画图板,6,创建自定义控件 创建“工具箱”自定义控件,实战引导一步步完成简易画图板,7,创建自定义控件 创建“绘图设置”自定义控件,实战引导一步步完成简易画图板,8,创建自定义控件 创建“调色板”自定义控件,实战引导一步步完成简
3、易画图板,9,实现“文件”菜单功能 定义窗体级变量private Graphics g; /主要绘图对象private Graphics gp;/辅助绘图对象 private string filePath; /保存文件的默认路径 private Bitmap bmp; /pictureBox1.Image,当前操作的图片,实战引导一步步完成简易画图板,10,实现“文件”菜单功能 实现“新建”菜单项 该菜单项的功能主要是实现初始化,如设置初始画布大小,画布清空,创建绘图和辅助绘图对象等。 实现“打开”菜单项 使用“打开文件”对话框,打开一幅图片并加载到画布上,创建绘图对象,设置状态栏信息。 实
4、现“另存为”菜单项 使用“保存文件”对话框保存图片,设置状态栏信息。,实战引导一步步完成简易画图板,11,实现“文件”菜单功能 实现“保存”菜单项 如果已经保存过文件,文件名不为空,直接保存即可,否则调用“另存为”的相应事件。 实现“退出”菜单项 直接退出程序。这里的处理较简单,可以加上一些是否保存的判断功能,具体可以参考第4章记事本的“退出”菜单项功能。 在Form1的Load事件中作初始化 初始化窗体,包括得到使画布得到焦点等信息。,实战引导一步步完成简易画图板,12,实现绘图工具的功能 实现铅笔工具和直线工具以及橡皮擦功能 在实现绘图功能之前,先在Form1类代码里面添加一些窗体级变量以
5、及一个辅助性的方法UpdateDrawSettings。该方法用来获取DrawSettings控件以及Pallette控件中的设置,然后配置当前绘图所使用的CurrentPen和CurrentBrush。 然后使用pictureBox1的鼠标事件进行绘图处理。实现铅笔工具、橡皮工具和直线工具的代码如下,主要是通过MouseDown、MouseMove和MouseUp事件来识别当前鼠标的状态,并做出相应的动作。,实战引导一步步完成简易画图板,13,实现绘图工具的功能 实现矩形、实心矩形和带轮廓线的矩形的绘制 在实现其它绘图工具的功能时,主要考虑在鼠标的MouseMove事件中是使用g对象在pic
6、tureBox1.Image上绘图,还是使用gp在pictureBox1上绘图。下面给出的是有关矩形的各样式的实现的部分代码,该部分代码和前面的铅笔、橡皮和直线工具的代码都是属于pictureBox1_MouseMove事件的代码,只是属于不同case选项。,实战引导一步步完成简易画图板,14,1、GDI+概述 GDI+是GDI(即Windows早期版本中附带的GraphicsDeviceInterface)的后继者,它是一种构成WindowsXP操作系统的子系统的应用程序编程接口(API)。GDI+的托管类接口包含大约60个类、50个枚举和8个结构。,核心技能,15,2、 Graphics类
7、 Graphics类是GDI+的核心,Graphics提供将对象绘制到显示设备的方法。Graphics可以与特定设备的上下文相关联,是用于创建图形的对象。它封装了绘制直线、曲线、图形、图像和文本的方法,是GDI+实现绘制直线、曲线、图形、图像和文本的类,是GDI+操作的基础类。,核心技能,16,3、向量图形概述,核心技能,17,4、绘制图形 笔、直线 myGraphics.DrawLine(myPen, 4, 2, 12, 6); 绘制矩形 myGraphics.DrawRectangle(myPen, 100, 50, 80, 40); 绘制椭圆 myGraphics.DrawEllipse
8、(myPen, 100, 50, 80, 40);,核心技能,18,4、绘制图形 绘制弧线 myGraphics.DrawArc(myPen, 100, 50, 140, 70, 30, 180); 多边形 Point myPointArray = new Point(0, 0), new Point(50, 30), new Point(30, 60) ;myGraphics.DrawPolygon(myPen, myPointArray); 基数样条 myGraphics.DrawCurve(myPen, myPointArray, 1.5F);,核心技能,19,4、绘制图形 贝塞尔样条
9、myGraphics.DrawBezier(myPen, 0, 0, 40, 20, 80, 150, 100, 10); 在指定位置绘制文本 using (Font font1 = new Font(“Times New Roman“, 24, FontStyle.Bold, GraphicsUnit.Pixel)PointF pointF1 = new PointF(30, 10);e.Graphics.DrawString(“Hello“, font1, Brushes.Blue, pointF1);,核心技能,20,5、图形路径 下面的示例绘制了由直线、椭圆和贝塞尔样条组成的路径: m
10、yGraphicsPath.AddLine(0, 0, 30, 20); myGraphicsPath.AddEllipse(20, 20, 20, 40); myGraphicsPath.AddBezier(30, 60, 70, 60, 50, 30, 100, 10); myGraphics.DrawPath(myPen, myGraphicsPath);,核心技能,21,6、画笔和实心形状 实心画笔阴影画笔纹理画笔渐变画笔,核心技能,22,【实训目的】 完善“画图”程序功能,实现椭圆的绘制、贝赛尔曲线绘制,以及实现支持文本输入的功能。 【任务描述】 1、实现椭圆的绘制 2、实现贝赛尔曲线绘制 3、实现文本工具,拓展实训 7,23,【任务描述】 在实际应用中,用图形来表示数据往往更加形象。图 735是一个折线图,根据表 7.5 中的数据,表示某产品的每月销量。 在练习中,可以使用十二个TextBox控件来接受十二个月份的销量数据,然后再查看图形的变化。,课后练习 7,24,