1 / 18

绘图的 API 函数

绘图的 API 函数. 电信学院 嵌入式技术与应用专业. 实验提纲. 1 实验目的 2 实验内容 3 预备知识 4 实验设备 5 实验原理 6 实验思考. 实验目的. 学习使用嵌入式系统绘图的 API 函数。理解绘图设备上下文( DC )在多任务操作系统中的作用。会使用绘图设备上下文( DC )在屏幕上绘制一个圆角矩形和一个圆。了解绘制动画防止闪烁的基本原理,可以实现无闪烁的动画。. 实验内容. 本次实验通过使用嵌入式系统的绘图 API 函数,首先,在屏幕上绘制一个圆角矩形和一个整圆。然后,再在屏幕上无闪烁的绘制一个移动的正弦波。. 预备知识.

abra
Download Presentation

绘图的 API 函数

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 绘图的API函数 电信学院 嵌入式技术与应用专业

  2. 实验提纲 1 实验目的 2 实验内容 3 预备知识 4 实验设备 5 实验原理 6 实验思考

  3. 实验目的 • 学习使用嵌入式系统绘图的API函数。理解绘图设备上下文(DC)在多任务操作系统中的作用。会使用绘图设备上下文(DC)在屏幕上绘制一个圆角矩形和一个圆。了解绘制动画防止闪烁的基本原理,可以实现无闪烁的动画。

  4. 实验内容 • 本次实验通过使用嵌入式系统的绘图API函数,首先,在屏幕上绘制一个圆角矩形和一个整圆。然后,再在屏幕上无闪烁的绘制一个移动的正弦波。

  5. 预备知识 • 1、用ARM ADS1.2集成开发环境,编写和调试程序的基本过程。 • 2、基于uCOS-II操作系统的应用程序的框架结构。

  6. 实验设备及工具(包括软件调试工具) • 硬件:ARM嵌入式开发平台、用于ARM920T的JTAG仿真器、PC机Pentium100以上。 • 软件:PC机操作系统Win2000或WinXP、ARM ADS1.2集成开发环境、仿真器驱动程序、超级终端通讯程序、SourceInsight。

  7. 实验原理 • 控件是可视化编程的基础,每个控件是一个相对独立的组件,有其自有的显示方式,动态内存管理模式以及与系统通信的方法。对于应用程序开发人员来说,并不需要掌握控件内部到底是怎么样工作,只需要使用控件提供的API函数,设置控件的属性,即可改变控件的显示结果。 • 与绘图设备上下文(DC)有关的函数有:initOSDC()用来初始化系统的DC,为DC动态内存开辟空间;CreateDC()和DestoryDC(PDC pdc)分别用来创建和删除DC,前者返回所创建的DC指针,后者则释放DC的内存空间。 • 和绘图有关的函数有TextOut(),LineTo(),FillRect(),Circle(),ShowBmp()等常见的图形函数。后面详细介绍这些函数的使用。

  8. 实验原理 • 在uCOS-II系统环境下,绘图必须通过使用绘图设备上下文(DC)来实现。绘图设备上下文(DC)中包括了与绘图相关的信息,比如:画笔的宽度、绘图的原点等等。这样,在多任务系统中,不同的任务通过不同的绘图设备上下文(DC)绘图才不会互相影响。 • 绘图设备上下文(DC)的结构定义如下:

  9. 绘图设备上下文(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

  10. 实验原理 • 在uCOS-II操作系统中,液晶显示屏的刷新是通过Lcd_Fresh_Task任务完成的,该任务是在系统附加任务初始化函数OSAddTask_Init()中定义的,该函数开辟了LCD刷新任务,触摸屏任务,键盘任务等。绘图首先是在绘图缓冲区中完成的,然后系统自动(也可以通过设置绘图设备上下文参数,不让系统自动刷新)向Lcd_Fresh_Task发送更新消息。其流程图如图所示:

  11. 实验原理 • 绘图是在后台进行的,绘制完成之后,再更新到液晶屏上,所以,在绘图的时候不用担心反覆的擦除屏幕会引起屏幕的闪烁,这样,可以很方便的实现动画无闪烁的显示。绘制完一次图形以后,必须要使用OSTimeDly()给出一定时间的延时(推荐用200),同时使Main_Task任务主动让出对CPU的控制权,使Lcd_Fresh_Task任务可以完成刷新。

  12. 绘图相关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屏幕上显示文字

  13. 实验原理 • 参数说明: • pdc:指向绘图设备上下文(DC)的指针 • x,y:所输出文字左上角的屏幕坐标 • ch:指向输出文字字符串的指针 • bunicode:是否为Unicode编码,如果是TRUE,表示ch指向的字符串为Unicode字符集;如果为FALSE,表示表示ch指向的字符串为GB字符集。 • fnt:指定字体的大小型号,如下表:

  14. 实验原理 • 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:直线绘图目的点的屏幕坐标

  15. 实验原理 • ClearScreen • 定义:void ClearScreen() • 功能:清除整个屏幕的绘图缓冲区,即:清空LCDBuffer2 • Circle • 定义:void Circle(PDC pdc, int x0, int y0, int r) • 功能:绘制指定圆心和半径的圆 • 参数说明: • pdc:指向绘图设备上下文(DC)的指针 • x0,y0:圆心坐标 • r:圆的半径

  16. 实验原理 • ArcTo • 定义:void ArcTo(PDC pdc, int x1,int y1, U8 arctype, int R) • 功能:绘制圆弧,从画笔的当前位置绘制指定圆心的圆弧到给定的位置 • 参数说明: • pdc:指向绘图设备上下文(DC)的指针 • x1,y1:绘制圆弧的目的位置 • arctype:圆弧的方向,1:逆时针,0:顺时针 • R:圆弧的半径

  17. 实验原理 • SetDrawOrg • 定义:void SetDrawOrg(PDC pdc, int x,int y, int* oldx, int *oldy) • 功能:设置绘图设备上下文(DC)的原点 • 参数说明: • pdc:指向绘图设备上下文(DC)的指针 • x,y:设定的新原点 • oldx,oldy:返回的以前原点的位置

  18. 思考题 • 1.怎样实现复杂的图形绘画?如何利用象素的逻辑运算提高图形重画速度? • 2.怎样实现一个低速示波器,将AD采集的结果用曲线绘制出来?

More Related