本文记录directfb程序的基本操作流程。

1、首先创建一个directfb对象:DirectFBInit(&argc,&argv)初始化然后创建DirectFBCreate(&dfb)。

2、由directfb对象创建界面surface:dfb->CreateSurface(dfb,&dsc,&primary),primary就是我们的绘图面。

3、绘图:首先要画一个背景,一般是primary->FillRectangle然后在背景上画图。每次画图前最好都要setcolor一下,改变画笔的颜色。

4、将图画展现出来:flip函数将画面显示到界面上。

参考示例:画一条直线

转至http://blog.csdn.net/wangjijian/article/details/6150808

Simple fullscreen application that draws a horizontal line.

代码如下:

#include <stdio.h>

#include <unistd.h>

#include <directfb.h>

static IDirectFB *dfb = NULL;

static IDirectFBSurface *primary = NULL;

static int screen_width = 0;

static int screen_height = 0;

#define DFBCHECK(x...)                                                  /

{                                                                       /

DFBResult err = x;                                              /

/

if (err != DFB_OK)                                              /

{                                                               /

fprintf( stderr, "%s <%d>:/n/t", __FILE__, __LINE__ );  /

DirectFBErrorFatal( #x, err );                          /

}                                                               /

}

int main(int argc, char **argv)

{

DFBSurfaceDescription dsc;

DFBCHECK (DirectFBInit (&argc, &argv));

DFBCHECK (DirectFBCreate (&dfb));

DFBCHECK (dfb->SetCooperativeLevel (dfb, DFSCL_FULLSCREEN));

dsc.flags = DSDESC_CAPS;

dsc.caps = DSCAPS_PRIMARY | DSCAPS_FLIPPING;

DFBCHECK (dfb->CreateSurface( dfb, &dsc, &primary ));

DFBCHECK (primary->GetSize (primary, &screen_width, &screen_height));

DFBCHECK (primary->FillRectangle (primary, 0, 0, screen_width, screen_height));

DFBCHECK (primary->SetColor (primary, 0x80, 0x80, 0xff, 0xff));

DFBCHECK (primary->DrawLine (primary,

0, screen_height / 2,

screen_width - 1, screen_height / 2));

DFBCHECK (primary->Flip (primary, NULL, 0));

sleep(5);

primary->Release(primary);

dfb->Release(dfb);

return 23;

}

下面我们来看这个程序,前三行:

#include <stdio.h>

#include <unistd.h>

#include <directfb.h>

为头文件包含。第5到第8行:

static IDirectFB *dfb = NULL;

static IDirectFBSurface *primary = NULL;

static int screen_width = 0;

static int screen_height = 0;

为全局变量定义。第10到第19行为出错处理宏:

#define DFBCHECK(x...)                                                  /

{                                                                       /

DFBResult err = x;                                              /

/

if (err != DFB_OK)                                              /

{                                                               /

fprintf( stderr, "%s <%d>:/n/t", __FILE__, __LINE__ );  /

DirectFBErrorFatal( #x, err );                          /

}                                                               /

}

此宏定义在官方给的程序中很常见,确实也挺好用。第21到46行为主程序代码段。

其中,第23行:

DFBSurfaceDescription dsc;

为局部变量定义,dsc为平面属性描述变量,用以创建与其相匹配的平面。

第25到26行:

DFBCHECK (DirectFBInit (&argc, &argv));

DFBCHECK (DirectFBCreate (&dfb));

为DirectFB初始化函数,第25行用以初始化命令行参数,而第26行用以创建DirectFB的主接口。

第28到30行对平面属性进行了初始化,其中第28行:

DFBCHECK (dfb->SetCooperativeLevel (dfb, DFSCL_FULLSCREEN));

设置了DirectFB的主接口的同步等级,DFSCL_FULLSCREEN与DFSCL_EXCLUSIVE相同,均为非共享的同步等级,在总接口使用CreateSurface方法创建平面时,将创建全屏平面。

第29到30行:

dsc.flags = DSDESC_CAPS;

dsc.caps = DSCAPS_PRIMARY | DSCAPS_FLIPPING;

说明了即将创建的平面的属性,在本例中,我们要创建一个可flip的主平面。

第32到34行:

DFBCHECK (dfb->CreateSurface( dfb, &dsc, &primary ));

DFBCHECK (primary->GetSize (primary, &screen_width, &screen_height));

DFBCHECK (primary->FillRectangle (primary, 0, 0, screen_width, screen_height));

创建了一个平面,并对此平面作了相应的初始化操作。第33行获取了此平面(全屏主平面)的宽高值,第34行在平面上画了一个黑色(DirectFB系统默认颜色)的屏幕大小矩形,此函数是受stb225平台硬件加速支持的。

第36到41行:

DFBCHECK (primary->SetColor (primary, 0x80, 0x80, 0xff, 0xff));

DFBCHECK (primary->DrawLine (primary,

0, screen_height / 2,

screen_width - 1, screen_height / 2));

DFBCHECK (primary->Flip (primary, NULL, 0));

sleep(5);

的功能为在屏幕正中心画一条横线,并显示5秒钟。第36行设置了线的颜色,第37到39行进行画线操作,将36行所设置颜色的线画到primary平面上,第40行将画有横线的平面显示出来,第41行,程序休眼5秒,即此线在屏幕上显示5秒。

第43到45行:

primary->Release(primary);

dfb->Release(dfb);

return 23;

程序作了相应的清理操作,而后退出。

DirectFB程序中,如果定义了接口,则一定需要使用相应的Release方法将此接口进行释放,否则可能引起内存泄漏问题,甚至可能破坏程序的稳定性。

DirectFB学习笔记一的更多相关文章

  1. DirectFB学习笔记三

    本篇目的,通过键盘的esc键控制程序退出.学习输入设备产生事件,接收事件,产生反应. 首先获取输入设备 IDirectFBInputDevice *keyboard = NULL; dfb->G ...

  2. DirectFB学习笔记二

    本篇目的,画一个方框,在方框上画一串字符. 实现步骤:首先创建IDirectFB接口,通过它再创建要显示的表面surface,同时创建字体font,绘制字符必须要设置绘制的字体,否则绘制不成功.然后清 ...

  3. DirectFB学习笔记四

    本篇目的,实现按钮的点击事件捕获,也就是鼠标点击,如果点击在方框范围内,则响应,在方框外,则忽略. 由于鼠标移动和点击都会产生事件,因此,我们可以在鼠标移动的时候记录坐标,在点击时比较坐标是否在方框范 ...

  4. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  5. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  6. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  7. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

  8. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  9. seaJs学习笔记2 – seaJs组建库的使用

    原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...

随机推荐

  1. 多种语言开发Spark-以WordCount为例

    Spark是目前最火爆的大数据计算框架,有赶超Hadoop MapReduce的趋势.因此,趁着现在还有大多数人不懂得Spark开发的,赶紧好好学习吧,为了使不同的开发人员能够很好的利用Spark,S ...

  2. Yii2 Pjax 与 ActionForm ,不刷新提交数据

    <?php yii\widgets\Pjax::begin(['id'=>'phoneDetail']);?> <?php $form = ActiveForm::begin( ...

  3. 关于xml中有特珠字符而导致XmlDocument无法Load的处理

    这是个小事故导致的... 我们线上有个节目里名称里(`F`H9)MSTJXCX0B3J69,虽然我们看到是(`F`H9)MSTJXCX0B3J69,但百思不得其解,发现每次在XmlDocument.L ...

  4. Java 学习文章汇总

    目前JAVA可以说是产业界和学术界最热门的语言,许多人都很急切想把JAVA学好. 但学习是需要步骤的,除非像电影中演的那样,能够把需要的专业技巧下载到脑海:主角只花了几秒下载资料,就马上具备飞行员的技 ...

  5. Plupload上传插件简单整理

    Plupload Plupload是有TinyMCE的开发者开发的,为您的内容管理系统或是类似上传程序提供一个高度可用的上传插件.Plupload 目前分为一个核心API 和一个jQuery上传队列部 ...

  6. Java对象的内存模型(一)

    前言 新人一枚,刚刚入门编程不久,各方面都在学习当中,博文有什么错误的地方,希望我们可以多多交流! 最近,在开发App后台过程中,需要将项目部署到云服务器上.而云服务器的内存大小却只有1G.要如何做到 ...

  7. Python之路-Linux命令基础(2)

    作业一: 1)    新建用户natasha,uid为1000,gid为555,备注信息为"master" 2)    修改natasha用户的家目录为/Natasha 3)    ...

  8. 安全性测试之防范 DDoS 攻击

    安全性测试之防范 DDoS 攻击   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:90882 ...

  9. poptest分享计划以及提供的服务

    poptest分享计划以及提供的服务 POPTEST致力于测试开发工程师的培养,能让学员经过系统培训后从事自动化测试工作,包括功能自动化.性能自动化.接口自动化以及移动端系统的自动化测试等,由于移动端 ...

  10. POPTEST老李谈钩子

    poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:908821478,咨询电话010-845052 ...