frame buffer属性打印

简介: 版权声明:您好,转载请留下本人博客的地址,谢谢 https://blog.csdn.net/hongbochen1223/article/details/49274571 (一):写...
版权声明:您好,转载请留下本人博客的地址,谢谢 https://blog.csdn.net/hongbochen1223/article/details/49274571

(一):写在前面

在这里我们主要实现了打印frame buffer的一些信息,其中包括分辨率,所占内存地址的开始地址,偏移量,BPP以及所占内存的宽度和高度等信息.主要是通过对这些参数的打印操作来实现对frame buffer的进一步深入的了解.

(二):如何编译以及运行

首先,我们看到,在我们的目录中有三个文件,fbtool.h,fbtool.c以及test.c,其中main函数位于test.c文件中.下面是我们的编译命令.

gcc fbtool.h fbtool.c test.c -o test

编译完成之后,就会生成test的可执行文件.

一般情况下,我们只要使用

./test

便能够运行该程序文件,但是由于在运行过程中,需要打开/dev/fb0文件,所以需要使用特权用户运行该程序,我们使用下面的命令来运行我们的程序文件.

sudo ./test

这样程序就能够顺利执行了.

(三):执行结果展示

下面我们来看一下我们的执行结果:

frame buffer所占内存的开始地址为:-1341710336
frame buffer 的类型为:0
frame buffer的可见清晰度为:
    x = 1366
    y = 768
frame buffer的虚拟清晰度为:
    x = 1366
    y = 768
frame buffer的虚拟分辨率到可见分辨率的偏移量为:
    x = 0
    y = 0
frame buffer的BPP为:32
这个后面再说!!
frame buffer在内存中所占的高度和宽度分别是:
    宽度 = -1
    高度 = -1

这样就能明显的看出frame buffer的一些属性了.

(四):该程序的构成

在这里我们说一下我们如果构建的该程序.

1:首先我们需要定义一个结构体,该结构体包括四个变量:

    int fb;   //framebuffer打开后的唯一标识符
    struct fb_fix_screeninfo fb_fix;  
    struct fb_var_screeninfo fb_var;
    char dev[20];  //设备名称

2:定义完成结构体之后,我们就需要定义操作frame buffer的各个方法,包括打开,关闭fb0设备,打印相关信息的函数等

//打开framebuffer
int fb_open(PFBDEV pFbdev);
//关闭framebuffer
int fb_close(PFBDEV pFbdev);
//打印frame buffer 所占内存的开始地址 
void pmem_start(PFBDEV pFbdev);
//打印FB_TYPE
void p_type(PFBDEV pFbdev);
//打印可见清晰度
void p_visible_res(PFBDEV pFbdev);
//打印虚拟分辨率
void p_virt_res(PFBDEV pFbdev);
//打印虚拟到可见的偏移量
void p_offset(PFBDEV pFbdev);
//打印每个像素的位数
void p_bpp(PFBDEV pFbdev);
//打印R,G,B和透明度
void p_rgbt(PFBDEV pFbdev);
//打印在内存中的高度和宽度
void p_hw(PFBDEV pFbdev);

3:接着就是这些函数的实现

这些函数的实现都是比较简单的,基本上是打印结构体中的一些信息.

4:编写测试程序,运行测试

最后就是编写我们的main函数,进行编译测试.

(五):后期展望

在后面一个测试中,着重讲解fb_var里面的R,G,B和透明度的值.

(六):写在后面

宝剑锋从磨砺出,梅花香自苦寒来.

注意:源代码我已经长传到github中,下面是地址:

源代码下载

目录
相关文章
|
1月前
|
Java
让星星⭐月亮告诉你,Java NIO之Buffer详解 属性capacity/position/limit/mark 方法put(X)/get()/flip()/compact()/clear()
这段代码演示了Java NIO中`ByteBuffer`的基本操作,包括分配、写入、翻转、读取、压缩和清空缓冲区。通过示例展示了`position`、`limit`和`mark`属性的变化过程,帮助理解缓冲区的工作原理。
29 2
|
4月前
|
C#
C#中使用IntPtr.Size属性来判断当前系统是32位还是64位
这段代码首先检查 `IntPtr.Size`的值,如果是4,则输出"当前系统是32位";如果是8,则输出"当前系统是64位";如果都不是,就输出"未知系统位数"。
59 0
页面中的位置:client、page、screen、offset、以及元素视图位置的区别和方法
页面中的位置:client、page、screen、offset、以及元素视图位置的区别和方法
nobuffer与av_read_frame的关系
nobuffer与av_read_frame的关系
83 0
av_read_frame每次返回的视频和音频帧数
av_read_frame每次返回的视频和音频帧数
78 0
av_read_frame每次返回的视频和音频帧数
|
算法
frame_size (1536) was not respected for a non-last frame
frame_size (1536) was not respected for a non-last frame
100 0
frame_size (1536) was not respected for a non-last frame
|
编解码
av_read_frame返回值为-5 Input/output error
av_read_frame返回值为-5 Input/output error
161 0
|
数据可视化 定位技术 数据格式
Eccharts加载geojson环形GeometryCollection格式的解决方案:Cannot read property ‘length‘ of undefined
Eccharts加载geojson环形GeometryCollection格式的解决方案:Cannot read property ‘length‘ of undefined
216 0
ByteBuffer中的flip()、clear()、compact()
ByteBuffer中的flip()、clear()、compact()
153 0
ByteBuffer中的flip()、clear()、compact()