嵌入式系统图形库GUI核心模块介绍
本文转载自:http://blog.csdn.net/xteda/article/details/6575278
(作者 冯青华 信庭嵌入式工作室(www.xteda.com)- CEO Blog:http://blog.csdn.net/fqheda )
<转载请注名来路>
--------------------------------------------我是分割线--------------------------------------------------------------
嵌入式Linux 系统中UI( 用户界面) 编程需要图形库的支持,图形库可以看作基本的图形绘制支撑库,在嵌入式Linux 系统中比较出名的有QT4 、Gtk+3 、MiniGUI 等,QT4 由QT 公司开发,目前被Nokia 收购;Gtk+3 是开源的图形库,对Linux 提供原生支持;MiniGUI 由北京飞漫公司开发。三者都支持跨平台编译和编程。事实上图形库(GUI )还有很多种,那么如此多的图形库,同时你想图形编程,肯定面临选择的问题,学QT4 好,还是学Gtk+3 好,学MiniGUI 好,还是学MFC (Windows CE/Mobile 流行图形库),其实这些不是学习图形库的关键,因为不同的库提供的接口API 函数不同,编程语言也不同(MiniGUI 和Gtk+3使用C 语言、QT4 和MFC 使用C++ ),编程风格也有很大差异。关键在于学习图形库的核心模块,其实核心模块也不多,主要包括输入控制、输出显示、初级绘图、窗口部件、字库解析和解码、图片解码库 等。
图形库(GUI )核心模块- 输入控制 ,在嵌入式Linux 系统中如果需要用到图形库,输入控制是比较重要的需求,输入控制有几种常用的类型,键盘是其中一个,有些嵌入式系统需要的键盘和PC 机一样,叫Keyboard ,有些需要小键盘如手机,这种通常专业一点的叫法是Keypad ,还有一种是软件键盘,就是在触摸屏上模拟一个键盘(现在智能手机上比较流行),对于图形库来讲键盘有3 个重要的检测量,就是按下(Down) 、弹起(Up )和码字(KeyCode ) ,其中码字和实际的键盘按键一一对应,当然还有特殊,就是组合键;触摸屏是另外一种常用的输入控制,英文名叫TouchScreen ,除了可以模拟一个软键盘,它还可以模拟鼠标(Mouse) ,对于图形库来讲触摸屏有5 个重要的检测量,就是按下(Down) 、弹起(Up )、坐标位置( Axis ) ,单击(Single-clicked) 和双击(Double-clicked) , 目前比较流行手机手势识别(如划拉功能),就是通过这些量的计算和组合来实现的;鼠标(Mouse) 是和触摸屏类似的输入设备,不过在大多数的嵌入式系统中都是用触摸屏来替代鼠标(Mouse) ,所以对于图形库来讲鼠标需要检测的量和触摸屏相同, 也就是说在PC 机上开发嵌入式软件时可以用鼠标模拟键盘。以上嵌入式系统中常用的输入设备,当然还有其它的输入设备,如游戏机操纵杆(Joktick )等都属于比较专用的输入设备了。
图形库(GUI )核心模块- 输出显示 ,如果嵌入式系统没有显示设备,那就不需要图形库(GUI )了,如果用到了图形库(GUI ),添加显示设备就是必须了,嵌入式系统比较常用的显示设备是LCD ,特殊的应用之中也有用CRT 作为显示设备的(如医疗用的监视器),比较而言LCD 最为常用,其实支持CRT 还是支持LCD 是硬件和驱动的事情,对于图形库来讲和输出显示设备最密切的是图象缓冲区(又叫Famebuffer ), 就是说图形库是通过Famebuffer 来显示的,也许Famebuffer 对你来说比较抽象,你可以这么理解,Famebuffer 就是一张白纸,图形库就是带橡皮的铅笔在白纸(Famebuffer )画画,带橡皮的意思是可以在同样的这张白纸上改画的内容,如果用彩笔就可以画彩画了,橡皮也许就要改用涂字液了。除了Famebuffer ,输出显示和图形库相关的还有显示模式,是RGB888 还是ARGB8888 还是RGB565 等,这些和具体的显示(屏)器型号有关系。
图形库(GUI )核心模块- 初级绘图层 ,初级绘图层是图形库(GUI )最基础的绘制模块,如果还要找更基础的那就是打点,打点和显示输出设备的的单个像素(Pixel )对应,是图象显示的最小单元,其它的初级绘图都是以打点函数为基础来实现的 ,如画线,画弧、画椭圆、画长方体、画折线、画扇形、绘字、贴图等等都是用打点来实现的。为什么会有初级绘图模块,初级绘图其实是对现实物体的抽象,看看你的周围,物体都是点、线、圆、面组成,看深一点,到分子元字,那个层次,也是点、线、圆、面组成。所以用最基础的绘制原理上是可以实现对现实中各个实物的绘制和模拟的。事实上图形库(GUI )编程的实践也证明也其正确性。
图形库(GUI )核心模块- 窗口部件 ,窗口部件是基于初级绘图的基础实现, 它应需求而生,就是说窗口部件的底层是初级绘图层,窗口部件是初级绘图层的一种封装实现,如果没有窗口部件,你也可以通过初级绘图层来实现编程,不过这将十分的麻烦,所以为了简化UI 编程,就将常用的 一些初级绘图层实现的部件提取出来,划分为另一个层次就是窗口部件层,它实现的东西比较多,常用的有Label 、Button/PushButton 、Combobox 、Checkbox 、RadioButton 、Hbox 、Vbox 、Groupbox 、SpinBox 、Splash 、TextEdit 、LineEdit 等,相关联的有Backgroud 、Border 、Margin 、Frame 、Style 等。窗口部件可以用来实现其它常用的典型窗口如对话框(Dialog )、主窗口(MainWindows) 、文件管理器(FileManager )等等,这些都属于窗口部件的上一层,在嵌入式系统应用中,UI( 用户界面) 集中在窗口部件的改造、封装和应用上,因为初级绘图层太基础,而之上的的已实现的Dialog 、MainWindows 、FileManager 往往是不能满足需求的 ,所以需要设计自己的差异化的满足实际需求的Dialog 、MainWindows 和FileManager 等等。只有这样才能做出漂亮的界面,最主要是和别人不同(差异化)。
图形库(GUI )核心模块- 字库解析和解码 ,图形库比较总要的另外的模块是字库解析和解码,世界上有多个国家,采用的文字不一样,如何兼容和显示不同的文字(对应不同的字库)就需要用到字库解析和解码,就是说要显示中文就需要中文字库和中文字库解析与解码器,如过要显示英文,就需要英文字库和英文字库解析与解码器,要显示日、韩文就需要日、韩字库和日、韩字库解析与解码器。专业的叫法是国际化和本地化,就像一个会说各种语言的人,不同的场合说不同的语言,字库解析和解码就做同样的事情。
图形库(GUI )核心模块- 图片解码库 ,图片解码库是图形库(GUI )重要的组成模块,图形除了形就是图,所以图的处理是图形库的非常重要组成,图就是图片,在现实世界里图片存在着格式的差异,比较流行的格式用Bitmap 、Jpeg 、Png 、Gif 、Tiff 等,为了支持一个格式必须提供这种格式图片的解码器。图片解码库最常用的有两个方向,一个是用于实现图片浏览器,另外是用于帖图,目的是优化界面,使之显示的漂亮美观。
学习UI (用户界面)编程就需要学好图形库,而学好图形库不在于学习MFC 还是学习QT4 或者学习Gtk+3,而在于学习图形库的基础实现核心模块,知道图形库能干什么,怎样才能干什么才是UI (用户界面)编程的灵魂。
嵌入式系统图形库GUI核心模块介绍的更多相关文章
- 嵌入式系统添加无线wifi模块
开发环境:fl2440开发板,linux3.0内核,交叉编译器路径/opt/buildroot-2011.11/arm920t/usr/bin/arm-linux-,无线网卡RT3070 平时开发板联 ...
- ansible的介绍和一些基本模块介绍
必须保证ansible工作站与各个node实现无密码ssh登入 ①:192.168.1.100 - 在你本地的工作站或服务器上安装 Ansible. ②:文件服务器1到代理服务器3 - 使用 19 ...
- 嵌入式系统WinCE下应用程序GUI界面开发【转】
嵌入式系统WinCE下应用程序GUI界面开发 ByToradex 秦海 本文旨在介绍嵌入式系统在Wince下进行GUI应用程序开发可以选择的不同GUI开发框架(Framework),目前最常用的几种方 ...
- Nginx核心流程及模块介绍
Nginx核心流程及模块介绍 1. Nginx简介以及特点 Nginx简介: Nginx (engine x) 是一个高性能的web服务器和反向代理服务器,也是一个IMAP/POP3/SMTP服务器 ...
- 嵌入式系统Linux内核开发工程师必须掌握的三十道题(转)
嵌入式系统Linux内核开发工程师必须掌握的三十道题 如果你能正确回答以下问题并理解相关知识点原理,那么你就可以算得上是基本合格的Linux内核开发工程师,试试看! 1) Linux中主要有哪几种内核 ...
- C语言嵌入式系统编程修炼之二:软件架构篇
模块划分的"划"是规划的意思,意指怎样合理的将一个很大的软件划分为一系列功能独立的部分合作完成系统的需求.C语言作为一种结构化的程序设计语言,在模块的划分上主要依据功能(依功能进行 ...
- Python第五章__模块介绍,常用内置模块
Python第五章__模块介绍,常用内置模块 欢迎加入Linux_Python学习群 群号:478616847 目录: 模块与导入介绍 包的介绍 time &datetime模块 rando ...
- python之路8-内置模块介绍
time & datetime模块 1 #_*_coding:utf-8_*_ 2 __author__ = 'Alex Li' 3 4 import time 5 6 7 # print(t ...
- C语言嵌入式系统编程修炼
C语言嵌入式系统编程修炼 2008-08-19 作者:宋宝华 来源:天极网 C语言嵌入式系统编程修炼之背景篇 本文的讨论主要围绕以通用处理器为中心的协议处理模块进行,因为它更多地牵涉到具体的C语言编程 ...
随机推荐
- 剑指 offer set 1 二维数组中查找
总结 1. 二维数组搜索题遇到两个了, 一个是 Leetcode 上 search in 2D matrix. 那道题比较简单, 因为下一行的所有元素大于上一行的. 这道题对二维矩阵的要求比较松, 起 ...
- Sleep v.s. sleep
Sleep函数_百度百科 http://baike.baidu.com/link?url=EmOxsG_du8HdLbv_9nDVlahpZOQ6DgkoLKooQInorAqIl_CEhCvBzTC ...
- 从实验室搬到宿舍后可以上QQ但打不开网页
如果你是属于如标题这种情况:也就是从实验室换到宿舍或者从宿舍换到实验室,在之前的地方可以上网,但换了地方后就出现只能上QQ而不能打开网页的情况.此时,首先考虑DNS配置,很有可能是因为你搬到了宿舍,但 ...
- cocos2dx-lua使用UIListView制作二级折叠菜单
折叠菜单,用过jquery accordion的同学都知道是啥玩艺儿~,图片效果就是介样: cocos2dx不带有此控件,因此我们动手来实现一个. 原理很简单,展开的时候往listview里inser ...
- debian7 编译qtopia错误解决案例
问题: kernel/qjpegio.cpp:60:21: error: jpeglib.h: No such file or directory 解决 sudo apt-get install li ...
- 关于删除7z历史解压路径
目前7zip尚无此功能,只能从注册表入手了,7zip历史记录保存在注册表 HKEY_CURRENT_USER\Software\7-Zip\FM 下的CopyHistory和FolderHistory ...
- 一个对称加密、解密的方法C#工具类
封装了一个对称加解密的类,用私钥和密钥加解密 using System; using System.Collections.Generic; using System.Text; using Syst ...
- ubuntu下安装redis
(1)进去 /usr/local目录下 cd /usr/local 若没有local这个文件夹则创建一个 sudo mkdir /usr/local sudo chmod 777 ...
- linux-启动停止重启shell 简单shell示例
停止: #!/bin/bashpid=`ps -ef|grep /opt/lampp|grep -v grep|awk '{print $2}'|wc -l`b=0if [ $pid -gt $b ] ...
- HTML <input> 标签的 maxlength 属性
前端的表单,需要进行验证. 结合JS表单验证框架,写了很多前端验证的代码. 其中,有这么一个需求:用户最多只能输入10个字符. 按照惯性,肯定是会去写JS表单验证了. 实际上,根本没有必要. HTML ...