180 likes | 346 Views
绘图的 API 函数. 电信学院 嵌入式技术与应用专业. 实验提纲. 1 实验目的 2 实验内容 3 预备知识 4 实验设备 5 实验原理 6 实验思考. 实验目的. 学习使用嵌入式系统绘图的 API 函数。理解绘图设备上下文( DC )在多任务操作系统中的作用。会使用绘图设备上下文( DC )在屏幕上绘制一个圆角矩形和一个圆。了解绘制动画防止闪烁的基本原理,可以实现无闪烁的动画。. 实验内容. 本次实验通过使用嵌入式系统的绘图 API 函数,首先,在屏幕上绘制一个圆角矩形和一个整圆。然后,再在屏幕上无闪烁的绘制一个移动的正弦波。. 预备知识.
E N D
绘图的API函数 电信学院 嵌入式技术与应用专业
实验提纲 1 实验目的 2 实验内容 3 预备知识 4 实验设备 5 实验原理 6 实验思考
实验目的 • 学习使用嵌入式系统绘图的API函数。理解绘图设备上下文(DC)在多任务操作系统中的作用。会使用绘图设备上下文(DC)在屏幕上绘制一个圆角矩形和一个圆。了解绘制动画防止闪烁的基本原理,可以实现无闪烁的动画。
实验内容 • 本次实验通过使用嵌入式系统的绘图API函数,首先,在屏幕上绘制一个圆角矩形和一个整圆。然后,再在屏幕上无闪烁的绘制一个移动的正弦波。
预备知识 • 1、用ARM ADS1.2集成开发环境,编写和调试程序的基本过程。 • 2、基于uCOS-II操作系统的应用程序的框架结构。
实验设备及工具(包括软件调试工具) • 硬件:ARM嵌入式开发平台、用于ARM920T的JTAG仿真器、PC机Pentium100以上。 • 软件:PC机操作系统Win2000或WinXP、ARM ADS1.2集成开发环境、仿真器驱动程序、超级终端通讯程序、SourceInsight。
实验原理 • 控件是可视化编程的基础,每个控件是一个相对独立的组件,有其自有的显示方式,动态内存管理模式以及与系统通信的方法。对于应用程序开发人员来说,并不需要掌握控件内部到底是怎么样工作,只需要使用控件提供的API函数,设置控件的属性,即可改变控件的显示结果。 • 与绘图设备上下文(DC)有关的函数有:initOSDC()用来初始化系统的DC,为DC动态内存开辟空间;CreateDC()和DestoryDC(PDC pdc)分别用来创建和删除DC,前者返回所创建的DC指针,后者则释放DC的内存空间。 • 和绘图有关的函数有TextOut(),LineTo(),FillRect(),Circle(),ShowBmp()等常见的图形函数。后面详细介绍这些函数的使用。
实验原理 • 在uCOS-II系统环境下,绘图必须通过使用绘图设备上下文(DC)来实现。绘图设备上下文(DC)中包括了与绘图相关的信息,比如:画笔的宽度、绘图的原点等等。这样,在多任务系统中,不同的任务通过不同的绘图设备上下文(DC)绘图才不会互相影响。 • 绘图设备上下文(DC)的结构定义如下:
绘图设备上下文(DC)的结构 • typedef struct{ • int DrawPointx; • int DrawPointy; //绘图所使用的坐标点 • int PenWidth; //画笔宽度 • U32 PenMode; //画笔模式 • COLORREF PenColor; //画笔的颜色 • int DrawOrgx; //绘图的坐标原点位置 • int DrawOrgy; • int WndOrgx; //绘图的窗口坐标位置 • int WndOrgy; • int DrawRangex; //绘图的区域范围 • int DrawRangey; • structRECT DrawRect; //绘图的有效范围 • U8 bUpdataBuffer; //是否更新后台缓冲区及显示 • U32 Fontcolor; //字符颜色 • }DC,*PDC
实验原理 • 在uCOS-II操作系统中,液晶显示屏的刷新是通过Lcd_Fresh_Task任务完成的,该任务是在系统附加任务初始化函数OSAddTask_Init()中定义的,该函数开辟了LCD刷新任务,触摸屏任务,键盘任务等。绘图首先是在绘图缓冲区中完成的,然后系统自动(也可以通过设置绘图设备上下文参数,不让系统自动刷新)向Lcd_Fresh_Task发送更新消息。其流程图如图所示:
实验原理 • 绘图是在后台进行的,绘制完成之后,再更新到液晶屏上,所以,在绘图的时候不用担心反覆的擦除屏幕会引起屏幕的闪烁,这样,可以很方便的实现动画无闪烁的显示。绘制完一次图形以后,必须要使用OSTimeDly()给出一定时间的延时(推荐用200),同时使Main_Task任务主动让出对CPU的控制权,使Lcd_Fresh_Task任务可以完成刷新。
绘图相关API函数 • CreateDC • 定义:PDC CreateDC() • 功能:创建一个绘图设备上下文(DC),返回指向DC的指针 • DestoryDC • 定义:void DestoryDC(PDC pdc) • 功能:删除绘图设备上下文(DC),释放相应的资源 • 参数说明:pdc:指向绘图设备上下文(DC)的指针 • TextOut • 定义:void TextOut(PDC pdc, int x, int y, U16 *ch, U8 bunicode, U8 fnt) • 功能:在LCD屏幕上显示文字
实验原理 • 参数说明: • pdc:指向绘图设备上下文(DC)的指针 • x,y:所输出文字左上角的屏幕坐标 • ch:指向输出文字字符串的指针 • bunicode:是否为Unicode编码,如果是TRUE,表示ch指向的字符串为Unicode字符集;如果为FALSE,表示表示ch指向的字符串为GB字符集。 • fnt:指定字体的大小型号,如下表:
实验原理 • MoveTo • 定义:void MoveTo(PDC pdc, int x, int y) • 功能:把绘图点移动到指定的坐标 • 参数说明: • pdc:指向绘图设备上下文(DC)的指针 • x,y:移动画笔到绘图点的屏幕坐标 • LineTo • 定义:void LineTo(PDC pdc, int x, int y) • 功能:在屏幕上画线。从当前画笔的位置画直线到指定的坐标位置,并使画笔停留在当前指定的位置 • 参数说明: • pdc:指向绘图设备上下文(DC)的指针 • x,y:直线绘图目的点的屏幕坐标
实验原理 • ClearScreen • 定义:void ClearScreen() • 功能:清除整个屏幕的绘图缓冲区,即:清空LCDBuffer2 • Circle • 定义:void Circle(PDC pdc, int x0, int y0, int r) • 功能:绘制指定圆心和半径的圆 • 参数说明: • pdc:指向绘图设备上下文(DC)的指针 • x0,y0:圆心坐标 • r:圆的半径
实验原理 • ArcTo • 定义:void ArcTo(PDC pdc, int x1,int y1, U8 arctype, int R) • 功能:绘制圆弧,从画笔的当前位置绘制指定圆心的圆弧到给定的位置 • 参数说明: • pdc:指向绘图设备上下文(DC)的指针 • x1,y1:绘制圆弧的目的位置 • arctype:圆弧的方向,1:逆时针,0:顺时针 • R:圆弧的半径
实验原理 • SetDrawOrg • 定义:void SetDrawOrg(PDC pdc, int x,int y, int* oldx, int *oldy) • 功能:设置绘图设备上下文(DC)的原点 • 参数说明: • pdc:指向绘图设备上下文(DC)的指针 • x,y:设定的新原点 • oldx,oldy:返回的以前原点的位置
思考题 • 1.怎样实现复杂的图形绘画?如何利用象素的逻辑运算提高图形重画速度? • 2.怎样实现一个低速示波器,将AD采集的结果用曲线绘制出来?