当前位置:首页 > 嵌入式 > 嵌入式软件
[导读]DirectFB和Cairo的嵌入式图形开发实践

引 言
    DirectFB是一个提供硬件图形加速、输入设备处理抽象并集成了透明功能窗体系统和多显示层处理的开源库。通过对底层硬件不支持的图形操作以回调函数实现,DirectFB实现硬件设备的完全抽象。另外DirectFB在设计之初就充分考虑嵌入式系统的固有特性,体积小巧,资源消耗低。作为嵌入式系统中强大的图形处理库,DirectFB成为Linux下图形处理的一个新的标准(CELF AVG 1.0标准)。
    使用DirectFB可以绕开X Window系统,让应用程序直接操作Frame Buffer,从而加速和简化图形操作。这对于嵌入式系统是很重要的,因为在资源有限的嵌入式系统中通常没有运行X Window。当然,DirectFB可以采用XDirectFB来开发,这样原来基于X Window开发的程序不需要修改就可以运行起来。
    DirectFB采用的是LGPL协议,因而可做商用开发库。LinuxTV、Palm Foleo等移动公司的项目均采用DirectFB作为底层图形库。
    值得一提的是,考虑跨平台、多语言等特定需求,开发者可以选择以DirectFB为后端的Cairo图形库进行2D图形操作。实践证明,这是一种嵌入式系统中高效、通用的解决方案。
    本文在介绍DirectFB相关特性之后,通过实例说明了其在嵌入式系统中的开发方法,并对基于DirectFB的Cairo图形库的使用关键点作了相关介绍。

1 轻量级图形处理库DirectFB
    DirectFB提供了丰富的图形操作方法,而且所有操作在芯片支持的前提下均可进行硬件加速。例如:矩形和三角形绘制和填充、BLIT、Porter/Duff规则混色等。Di—reetFB内部集成了一个简易的窗口系统,支持透明窗体。显示层和输入设备等资源可以通过加锁的方式访问。DirectFB对任何通用表面(surface)都提供了抽象,这使得窗口和全屏之间的切换只需要简单的设置合作级别即可。
1.1 DirectFB整体框图介绍
    DirectFB通过操作系统中Frame Buffer驱动程序提供的内核接口来访问图形硬件设备,这意味着DirectFB需要Frame Buffer驱动才可以工作。无论是否使用硬件加速,DirectFB都需要驱动完成设置分辨率、色深等视频模式,映射Frame Buffer等操作。对于特定的图形操作,DirectFB通过访问图形硬件的内存映射端口,提交命令给显卡加速引擎来实现。其整体框架如图1所示。

1.2 DirectFB接口框架
    DirectFB提供了一套C接口给用户调用DirectFB的各项功能。在DirectFB中,接口实质上是一个结构体,结构体中包含了功能函数指针,不同接口的函数指针指向不同的核心函数。比如IDireetFBSurface接口代表屏幕中可操作的区块,其中封装了BLIT、画框、画线和FLIP等核心操作。
    其中IDirectFB是整个库的顶层接口,可以通过DirectFBCreate函数来创建,其他接口可以通过这个接口创建。所有存在的接口也可以通过它来枚举访问。图2展示了DireetFB的接口框架。

    表1对主要接口模块的功能作了简单说明。具体的操作可以查看DirectFB官方网站的相关帮助文档。

2 DirectFB应用开发
   
下面通过一个例子说明使用DirectFB接口的开发方法:

   
    [!--empirenews.page--]上面几行代码分别声明了DirectFB的主接口、显示层接口、窗口接口、绘图表面接口和消息缓冲接口。然后通过下列代码对DirectFB和它的接口进行初始化:


    一旦接口创建完毕,即可调用接口的相关方法实现DirectFB的提供图形操作功能。比如,下面的代码实现了在窗体的绘图表面绘制矩形框的操作:

   


    值得一提的是DirectFB实现了消息系统,用以响应用户输入、键盘鼠标等事件。对于嵌入式系统,DirectFB支持tslib方式接口的触摸屏输入消息响应。

3 以DirectFB为后端的2D图形处理
    考虑以跨平台输出,引入2D图形处理库Cairo。令Cairo以DirectFB为实际绘图后端(back end)的方案,在嵌入式系统中可以获得很好的性能以及极大的通用性。
    Cairo广泛地应用在GNOME、GTK+、pango等著名的软件中进行2D图形处理。以C语言开发的Cairo绑定了C++、Ruby、Perl、Java和.Net/mono等多种语言接口。其中Python和C++绑定在开源社区代码中得到广泛的应用。
    Cairo有自己的Surface管理机制,可以在SDL、XWindow或者DirectFB的Surface上创建Cairo Surface。然后,在这个Cairo Surface上创立Cairo主接口。下面的代码演示了这一过程:

   

    得到Cairo的主接口cr之后,就可调用一系列Cairo的2D绘图API了。下面的代码演示了用Cairo的API划线:

   
    Cairo丰富的特性在解决移植性的同时,可以弥补直接使用DirectFB 2D功能上的不足。比如DirectFB没有画虚线的API,但是调用Cairo的cairo_set_dash和cairo_stroke可以很轻松地实现这一功能。

4 小 结
    本文在介绍了DirectFB的特性和基本框架之后,阐述了DirectFB的基本开发方法,并提出一种使用基于DirectFB的Cairo 2D图形处理库的方案。它是一种兼顾了效率、通用性和功能性的嵌入式系统2D图形处理方案。笔者采用该方案实现了Windows CE GDI接口在ARM—Linux上的移植,工作良好,特在此与广大嵌入式系统开发人员分享。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

柏林2025年9月9日 /美通社/ -- 2025年9月5日,纳斯达克上市公司优克联集团(NASDAQ: UCL)旗下全球互联品牌GlocalMe,正式亮相柏林国际消费电子展(IFA 2025),重磅推出融合企...

关键字: LOCAL LM BSP 移动网络

深圳2025年9月9日 /美通社/ -- PART 01活动背景 当技术的锋芒刺穿行业壁垒,万物互联的生态正重塑产业疆域。2025年,物联网产业迈入 "破界创造"与"共生进化" 的裂变时代——AI大模型消融感知边界,...

关键字: BSP 模型 微信 AIOT

"出海无界 商机无限"助力企业构建全球竞争力 深圳2025年9月9日 /美通社/ -- 2025年8月28日, 由领先商业管理媒体世界经理人携手环球资源联合主办、深圳•前海出海e站通协办的...

关键字: 解码 供应链 AI BSP

柏林2025年9月9日 /美通社/ -- 柏林当地时间9月6日,在2025德国柏林国际电子消费品展览会(International Funkausstellung...

关键字: 扫地机器人 耳机 PEN BSP

武汉2025年9月9日 /美通社/ -- 7月24日,2025慧聪跨业品牌巡展——湖北•武汉站在武汉中南花园酒店隆重举办!本次巡展由慧聪安防网、慧聪物联网、慧聪音响灯光网、慧聪LED屏网、慧聪教育网联合主办,吸引了安防、...

关键字: AI 希捷 BSP 平板

上海2025年9月9日 /美通社/ -- 9月8日,移远通信宣布,其自研蓝牙协议栈DynaBlue率先通过蓝牙技术联盟(SIG)BQB 6.1标准认证。作为移远深耕短距离通信...

关键字: 蓝牙协议栈 移远通信 COM BSP

上海2025年9月9日 /美通社/ -- 为全面落实党中央、国务院和上海市委、市政府关于加快发展人力资源服务业的决策部署,更好发挥人力资源服务业赋能百业作用,8月29日,以"AI智领 HR智链 静候你来&quo...

关键字: 智能体 AI BSP 人工智能

北京2025年9月8日 /美通社/ -- 近日,易生支付与一汽出行达成合作,为其自主研发的"旗驭车管"车辆运营管理平台提供全流程支付通道及技术支持。此次合作不仅提升了平台对百余家企业客户的运营管理效率...

关键字: 一汽 智能化 BSP SAAS

深圳2025年9月8日 /美通社/ -- 晶泰科技(2228.HK)今日宣布,由其助力智擎生技制药(PharmaEngine, Inc.)发现的新一代PRMT5抑制剂PEP0...

关键字: 泰科 AI MT BSP

上海2025年9月5日 /美通社/ -- 由上海市经济和信息化委员会、上海市发展和改革委员会、上海市商务委员会、上海市教育委员会、上海市科学技术委员会指导,东浩兰生(集团)有限公司主办,东浩兰生会展集团上海工业商务展览有...

关键字: 电子 BSP 芯片 自动驾驶
关闭