如何做嵌入式开机动画

对于广泛应用的各种嵌入式系统,除了强大的应用功能外,人机界面的美观也是吸引用户的重要方面。因此,越来越多的嵌入式系统开发者希望在LCD上除了显示固定图案的菜单外,还能加入适量的动画,使整个界面屏幕更加生动、愉悦。动画设计有很多种编程语言和方法。根据是否需要使用其他应用软件和程序,这些方法可以分为两类:第一类是仅使用各种编程语言和开发环境中包含的文件、框架实现的设计方法;第二种是安装相关软件(如Flash、directdraw等。),并将这些软件的函数文件包含在相关语言的开发环境中,实现动画的设计方法。但是由于其较强的专用性和实时性要求,传统的开发语言在嵌入式系统中使用的并不多。虽然动画界面在嵌入式系统应用中并不是一个优先级很高的程序,但是开发者在选择其设计方法时也要辨别利弊,灵活运用,这样才能看到更赏心悦目的界面,而不是被LCD上杂乱的显示内容所困扰。

不安装第三方软件的1动画设计方法分析

(1)Logo适用于嵌入式设备的简单动画设计。

标志语言的设计方法是最简单的。它有一套内置的(海龟图形)系统,本身就是一种绘画语言,理论上可以加载到嵌入式系统中进行动画开发。但是由于一个嵌入式系统会有很多其他的软件设计部分,所以其他功能用Logo显然是不合适的,在一个嵌入式系统中安装两个开发环境更不现实。所以,如果在嵌入式系统开发中选择这种方法来制作动画,应该只适合简单的嵌入式设备,对于儿童来说同样复杂。

(2)最适合嵌入式系统的擦除方法。

c语言是嵌入式系统开发中应用最广泛的语言,高、中、低档系统都可以使用。因此,所有使用C语言的动画设计方法,理论上都适用于嵌入式系统的屏幕动画开发。然而,诸如动态打开图形视口方法、交替改变显示页面和编辑页面的方法、存储和重放图片的方法、以及直接操作动态图像存储器的方法等程序是复杂的,且需要不断地访问和存取图像,这需要大量的存储器资源。擦除动画设计可以解决上述问题。它的设计原理是:利用同色原理,当图形颜色和背景色相同时时,人眼无法感知。在动画设计中,当在一个位置绘制图像时,图像的颜色与背景颜色不同,然后在另一个位置绘制图像并且图像的颜色与背景颜色不同。此时,第一个绘制的图像绘制在原始位置并且图像的颜色与背景颜色相同,使得人眼只能看到新绘制的图像而看不到先前绘制的图像,并且先前绘制的图像感觉被擦除。

这样连续绘制多幅图像,每绘制一幅新图像就擦除原图像,实现观察者眼中的动画效果。综上所述,从资源消耗更少、执行速度更快的角度出发,笔者认为在常用的用C语言设计动画的方法中,最适合嵌入式系统的方法是首选擦除法。

(3)CBuilder本身不适合嵌入式开发。

使用CBuilder语言设计动画,可以方便地使用现成的组件生成图像和控制时间,从而解决动画设计中两个非常重要的问题。但是CBuilder本身并不适合嵌入式开发,因为嵌入式开发对空间和效率要求很高,而CB是高级应用开发的工具。不过有两点值得注意:一是现在很多公司都在自己做嵌入式开发,让它适合使用CB;此外,Borland公司正在开发嵌入式C,这是可以预期的。

(4)Java语言非常适合嵌入式系统的屏幕动画设计。Java语言经常用于嵌入式系统的开发,尤其是在手机中。Java语言的动画设计方法通过定义线程来控制动画时间;而使图像动态平滑的双缓冲方法需要大量内存,所以消除画面闪烁比较常用的方法是重载upGlate()。

(5)所有C语言方法都可以用于嵌入式系统动画设计。

在面向对象的C语言中,有多种动画设计方法可供选择:简单的动态图像(如闪烁的星星)可以被背景色覆盖;在屏幕固定位置显示动态图像时,可以选择多画面切换方式;用XOR画图的时候,不会出现全屏闪烁的情况,通常效果也不错,但是如果反复使用,会在清晰的图像处闪烁,还是不够完美。像素操作一般结合其他动态图像实现方式(如背景色覆盖);多缓冲技术是在不同的帧中绘制图形,并在这些不同的帧之间切换屏幕,达到动画效果;具体帧数可以根据实际动画的需要来确定。这类似于C语言中的双缓冲技术原理,只不过双缓冲只是绘制一个备用图像作为离屏图像,而多缓冲是将图形绘制在几个不同的帧中,并在这些帧之间切换屏幕。

因为大多数行业使用C/C作为嵌入式系统的开发语言,所以这些方法都可以用于嵌入式系统的动画设计。在Nord-Tec软件开发的Nord-Tec雪花屏保中,利用多缓冲技术实现了逼真的雪花动画。

(6)绘制复杂风格线条的方法

在GIS软件的设计中,往往需要使用一些相对固定但使用频率较高的符号来表示地理状态,如河流、铁路、海岸线等。很明显,这些基本符号图形一般都是比较复杂的线条,MFC提供的基本类库并没有提供可以直接使用的相关函数;即使在绘图功能强大的CDC中,也只提供了LineTo()和Set-Pixel()等一些通用的、基本的绘图功能。使用这些函数绘制GIS基础符号是一种效率很低的方法,在大量的绘制操作中会很明显,不推荐使用。但是,绘制复杂样式线条的问题可以通过Win32解决。最早出现在Windows NT 3.1中的API函数LineDDA。

(7)用VC实现简单、快速、流畅的动画。

在很多软件(尤其是游戏软件)的开发中,实现高速流畅的动画需要很深的技术,比如OpenGL和DirectX,开发者可能也有很深的数学基础。但是,如果我们在开发嵌入式系统的过程中,只想为应用程序的界面实现一些动画效果,我们可能不需要这些技术,而是使用WindowsAPI提供的或者MFC封装的GDI绘图函数来实现。虽然要求的动画复杂度不高,但是作为开发者,我们不能降低对动画效果的要求。因此,我们需要知道如何使用GDI函数来开发流畅、无flash、高速的动画。

这项技术的关键是在内存中创建一个与显示动画的窗口区域一样大的位图。首先用GDI函数绘制位图,然后在适当的时候从内存中显示出来。由于位图已经绘制,不像通常编程那样边绘制边显示,所以显示一帧图形时减少了闪烁,实现了流畅的动画;同时,由于图形是直接从内存显示到当前形式,所以速度非常快,从而实现了高速动画。如果再创建一个线程在后台绘制图形,就会实现很多具有特效的动画,嵌入式系统的用户界面也会收到意想不到的效果。

在此基础上,还可以优化显示位图时的显示。比如不是所有的位图都显示,而是显示了动画的一部分,因为BitBlt函数在比特传输上非常慢。这更符合嵌入式系统对效率的重视。

2分析需要安装第三方软件的动画设计方法

(1)为教学研究开发的嵌入式设备可以使用Ubigraph。

Graphviz和Ubigraph都是图论生成软件,但ubig-graph更强大。有了它,可以快速生成图论模型的图形和动态图像,直观展示各种图论模型的三维结构,演示各种图论算法的过程。因为可以嵌入Java、C、C等语言,所以当然适合嵌入式系统的动画设计,尤其是一些专门为教学和科研开发的嵌入式设备。

(2)Flash对于嵌入式系统来说太华丽了。

Flash是一个功能强大的矢量动画软件,但是使用了很多先进的技术。但要想做出好看的电影特效动画,还是值得深入研究的。但是,对于嵌入式系统开发来说,太华丽了;如果不是特别需要突出游戏或动画的精致效果,一般开发者不应该以牺牲系统的速度和容量为代价,而牺牲结尾。

(3)3)DirectDraw方法对嵌入式系统的适用性

DirectDraw使用页面切换的方法实现图像动态化。既能访问系统内存,又能访问显示内存,实现了动态图像而不使画面闪烁,是一种“完美切换”技术。因此,DirectDraw技术受到程序员的青睐,尤其是在虚拟现实技术中。不过显然这种方法需要很大的内存,所需的开发文件也需要很大的硬盘空间。应用到一般的嵌入式系统中,对响应速度的限制会很明显。

其实用DirectDraw编程的核心点就是“在几个面之间复制”。在对界面动画复杂度要求不高的嵌入式系统中,可以使用C程序作为开发语言,在动画实现方法上,可以使用前面提到的C程序设计中的显示页和编辑页交替的DirectDraw方法,而不是几个面副本。但如果是大型嵌入式系统,重视界面动画效果,采用DirectDraw方法和面向对象开发语言仍然是较好的选择。

当然,如果你对美术工艺有特殊要求,可以尝试在嵌入式系统的软件设计中引入更专业的技术(比如3D效果的颜色锁定和Z排序以及视差)——系统本身应该是专业的、功能特定的,否则只能停留在理论上,难以实现!

3用于嵌入式系统开发的脚本语言

动画应用于网络时,可以选择直接使用脚本语言进行设计,如JSP、PHP等。现在很多嵌入式系统都有连接网络和相应功能的需求。虽然大部分系统的屏幕动画不涉及对外发布的问题,但是在网络化嵌入式系统的开发中,直接使用脚本语言编写动画是一种新的思路。

Python可以作为嵌入式系统的开发语言(已经在诺基亚智能手机采用的Symbian操作系统上得到证明)。它最大的优点是可以很方便的连接其他语言制作的各种模块(尤其是C/C)。所以简单的界面动画可以直接用Py-thon编写,也可以用C语言编写速度要求更高的复杂动画,嵌入到Python程序中。