Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2834849
  • 博文数量: 523
  • 博客积分: 11908
  • 博客等级: 上将
  • 技术积分: 5475
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-03 15:50
文章分类

全部博文(523)

文章存档

2019年(3)

2013年(4)

2012年(71)

2011年(78)

2010年(57)

2009年(310)

分类: 嵌入式

2010-04-17 19:57:29

其他同类软件的区别

经常有人问起,MiniGUI 和同类软件有何区别。本文将详细介绍 和同类软件之间的主要技术区别。

图形类软件的细分

在计算机领域中,要了解图形类软件,首先要弄清楚几个概念:

  • 图形(Graphics)。图形是从几何角度出发定义的概念;计算机图形学通常讲述如何在计算机屏幕上显示出点、直线、曲线等几何元素,包括三维物体。
  • 图像(Image)。图像更容易理解些,我们在网络上经常看到的、以 JPEG、PNG 格式化储存的图片或者照片,就属于图像;计算机图像处理通常涉及到图像的压缩编码方法、图像识别算法等。通常,图形处理中会涉及到一些图像相关的内容,比如,在一个封闭的几何对象(如三角形)表面上,显示出一副图片。

从本质上讲,MiniGUI 属于一种图形软件,为了更加清楚地理解 所提供的功能及其特性,我们需要了解一下计算机系统中图形相关软件的层次关系(参见下图)。

1.jpg

  • 底层图形设备支持软件:在计算机系统中,这类软件通常以操作系统驱动程序的形式存在,用来初始化显示设备、设置显示设备参数(如分辨率、颜色深度、刷新频率等)。在 Linux 操作系统中,FrameBuffer 驱动程序就是这类软件。在 Windows 平台中,针对显示卡的驱动程序也属于这类软件。
  • 窗口系统(Window System):窗口系统是用来以窗口形式展示应用程序可显示区域的软件。如我们熟悉的 Windows 系统。运行在 Windows 系统上的应用程序可以创建单个或者多个窗口,并在窗口中显示应用程序希望显示的内容。而窗口系统就负责管理这些由不同应用程序创建的窗口,确保他们能够协调显示在共用的计算机屏幕上。在 Windows 上,窗口系统以一个标准的操作系统组件形式运行。在 Linux/UNIX 系统中,窗口系统以独立于操作系统的应用程序形式运行,通常使用 X Window(X11)系统。窗口系统用来管理不同应用程序创建的窗口,确保他们可以共存于同一个计算机显示屏幕之上。通常,这些窗口会互相层叠在一起。但应用程序在向自己的窗口绘制图形、输出图像时,并不需要知道窗口是不是被其他窗口覆盖。这就是窗口系统的主要功能。另外,处理负责管理计算机屏幕之外,窗口系统还负责管理键盘、鼠标等输入设备。
  • 图形用户界面(Graphics User Interface)程序开发工具包(Toolkit):图形用户界面已经深深植入到普通计算机用户的心中。在 80 年代或者更早,计算机用户通常通过键盘和字符终端连接到主机上,通过键入各种复杂难记的计算机命令来操作计算机。从 80 年代中期 X Window 系统出现以来,计算机改头换面,以一种更加易于让普通用户理解的方式来运行应用程序。就像现在的 Windows 系统那样,用户通常使用鼠标,并辅助部分键盘操作就可以完成对计算机的操作。这些显示在窗口中的按钮、输入框、下拉框、菜单等等易于普通用户理解的图形化元素,就形成了这里所说的图形用户界面(Graphics User Interface,GUI)。GUI 不仅仅解放了计算机普通用户,而且还简化了应用程序的开发。计算机程序开发人员通常会使用由操作系统或者独立软件开发商提供的工具软件来开发 GUI 应用程序,通过在窗口上拖拽系统预定义的按钮、输入框、下拉框等组件,就能够快速设计出图形用户界面应用程序。在 Windows 系统上,我们一般使用 MFC、Qt 等开发 GUI 应用程序;而在 X Window 上,早先使用 Motif 开发 GUI 程序,现在流行使用 Gtk+ 和 Qt 来开发 GUI 程序。这里提到的 MFC、Qt、Motif、Gtk+ 等就属于这里所说的图形用户界面工具包。通常来讲,GUI Toolkit 软件运行在既有的窗口系统之上。
  • 矢量图形(Vector Graphics)支持软件:Adobe Flash 属于典型的矢量图形软件。在 Flash 中,所有的物体都被定义为矢量图形,通过定义矢量图形对象的运动方式(如放大、缩小、移动等)来实现动画效果。由于采用矢量图形技术,Flash 动画理论上可以随意放大和缩小,且不改变最终动画的输出效果。在各种窗口系统或者 GUI Toolkit 上,有很多矢量图形的支持库,如 Gtk+ 之上的 Cario、Windows 平台上的 GDI+ 等。目前,OpenVG 是渲染二维矢量图形的工业标准;而 SVG 则是矢量图形的 WWW 标准,可嵌入到网页中。
  • 三维图形(Three dimensions graphics)支持软件:三维图形支持软件用来实现三维物体的渲染,并最终显示在计算机屏幕上。目前,OpenGL 是用来渲染三维物体的工业标准。
  • 图形工具类软件:如 CorelDraw 这样的图形工具软件,可用来完成矢量图形的绘制、三维物体的建模等等。

读者应该对 GUI Toolkit 最为熟悉了,但大部分人通常会将窗口系统和 GUI Toolkit 混淆在一起。这是因为有些软件仅仅解决特定的需求,而有些软件却同时提供多种功能。比如 Windows 系统,它同时提供操作系统、窗口系统以及图形用户界面的支持。而在 Linux/UNIX 系统中,X Window 仅仅提供窗口系统功能,图形用户界面由 Motif、Gtk+、Qt 等提供支持。MiniGUI 和 Windows 类似,它即是窗口系统,也是一个图形用户界面支持系统,并且以组件的方式提供了对矢量图形和三维图形的支持。

嵌入式系统中常见的图形类软件

除了 之外,嵌入式系统中常用的图形类软件还有:

  • 底层图形设备支持软件
    • Linux FrameBuffer 驱动程序。在 Linux 操作系统中,FrameBuffer 驱动程序提供了对显示设备的一种抽象。不管是PC的显示卡还是嵌入式设备的LCD 控制器,都将有一个显示RAM(video RAM,VRAM)区域,代表了要在屏幕上显示的图像。VRAM必须足够大,以处理显示屏幕上所有的像素。程序员通过直接或间接地存取VRAM中的数据来进行进行图形操作,改变屏幕的显示。许多显示硬件提供从CPU的地址和数据总线直接访问VRAM的能力,这相当于把VRAM映射到了CPU的地址空间,从而允许更快的VRAM访问速度。VRAM 组成的内存段,就叫帧缓冲区(Frame Buffer)。通常,PC显示器和LCD都是光栅设备,屏幕上的每一点是一个像素,整个显示屏幕就是一个像素矩阵。帧缓冲区中的数据按照显示器的显示模式进行存储,记录了显示屏幕上每一个像素点的颜色值。我们知道,计算机以二进制方式存储数据,每位有两种状态(0与1)。对于单色显示模式,屏幕上一个像素点的颜色值只需用帧缓冲区中的一位表示,该位为1则表示该点是亮点。而在彩色显示模式下,要表示屏幕上像素点的颜色信息,需要更多的位或字节。对于16色显示模式,就需4位来存储一个颜色值。在256色显示模式下,一个像素点占8位即一个字节。在16位真彩色显示模式下,则需要两个字节来存储一个像素点的颜色值。不管在 PC 上还是嵌入式设备中,我们访问图形设备的目的,就是获取或设置显示芯片或者控制器的一些寄存器,以便设置显示分辨率、颜色深度等信息,然后获得帧缓冲区的地址,之后,通过操作帧缓冲区中的数据来改变显示器或者 LCD 上的像素。在 Linux 操作系统下,FB 驱动程序的典型用法如下:
      • 调用 open 系统调用,打开 Linux FB 驱动程序。Linux FB 驱动程序的设备名一般为 /dev/fb0 或者 /dev/fb/0。
      • 在打开的 FB 设备上执行 iotcl 命令,获取或者设置其显示模式,包括分辨率、颜色深度等。
      • 在打开的 FB 设备上执行 mmap 系统调用,将帧缓冲区映射到当前进程的地址空间内。
      • 操作 mmap 返回的内存段(即帧缓冲区),从而改变显示屏上的内容。
    • DirectFB 。DirectFB 是对包括普通显示设备在内各种图形设备的一种抽象接口。许多应用于多媒体设备(如IPTV、PMP)的显示芯片支持多种显示层。比如在典型的 IPTV 显示芯片中,会提供对 YUV 显示层、普通图形显示层或者 OSD(On Screen Display)层的支持。YUV 显示层用于显示视频输出数据,而图形层或者 OSD 层和 Linux FrameBuffer 类似。显示芯片会将所有这些层中显示的内容通过叠加最终显示到输出设备上,比如电视或者液晶屏。DirectFB 提供了一组接口,可方便应用程序管理多个显示层,或者向这些层中输出数据。另外,DirecFB 也对输入设备(如遥控器)提供了一定的抽象接口。DirectFB 目前支持 Linux 操作系统,可访问 获得该软件。
    • WindML 。WindML 是 操作系统的一个可选组件,其功能类似 DirectFB

  • 窗口系统
    • X11。X11 即 X Window 是针对 UNIX/Linux 系统的标准窗口系统。
    • MicroWindows 。MicroWindows 是 X Window 的一个精简版本,也称为 Nano X。
    • Qt/Embedded。如前所述,在 Windows 或者 X Window 上运行的 Qt 库属于 Toolkit 软件。Qt/Embedded 是 Qt 的嵌入式版本,运行在 Linux FrameBuffer 之上。为了不依赖于 X Window 等窗口系统,Qt/Embedded 包含了一个小型的窗口系统,称为 QWS。这样,Qt/Embedded 同时具有了窗口系统和窗口管理的功能。

  • 图形用户界面工具包
    • Gtk+。Gtk+ 原本运行于 X Window 之上,是 GNOME 桌面环境使用的 GUI Toolkit 软件。但 Gtk+ 也同时可以支持运行在其他窗口系统之上,如 Windows。在嵌入式 Linux 系统中,Gtk+ 可以运行于 DirectFB 之上。但这种方案下,因为没有窗口系统的支持,只能运行单个图形用户界面应用程序,而不支持多进程环境下的多窗口系统。
    • Qt。Qt 是一个跨平台的 GUI Toolkit 软件,和 Windows 上的 MFC 类似,它提供了一套用 C++ 封装的图形界面应用程序类库。
    • FLTK。FLTK 是一个非常简单的 GUI Toolkit 软件,一般和 MicroWindows 配合使用。
    • Tilcon。Tilcon 主要运行于 操作系统,提供了多种可应用于工业仪表、航空航天仪器中的构件。

因为 即是窗口系统软件,也是图形用户界面支持系统,所以,MiniGUI 和上面这些软件并不是互斥关系,相反:

  • 可以运行在 DirectFB (Linux)或者 WindML (VxWorks)之上。
  • 之上可以运行 Gtk+、FLTK 等 Toolkit。
阅读(2244) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~