`

【RFB】linux-framebuffer设备相关参数

 
阅读更多

如果应用程序需要知道Framebuffer设备的相关参数,必须通过ioctl()系统调用来完成。

在头文件<linux/fb.h>中定义了所有的ioctl命令字,不过,最常用的ioctl命令字是下面这两个:FBIOGET_FSCREENINFO和FBIOGET_VSCREENINFO。

前者返回与Framebuffer有关的固定的信息,比如图形硬件上实际的帧缓存空间的大小、能否硬件加速等信息。

而后者返回的是与Framebuffer有关的可变信息。

之所以可变,是因为对同样的图形硬件,可以工作在不同的模式下。

简单来讲,一个支持1024x768x24图形模式的硬件通常也能工作在800x600x16的图形模式下。

可变的信息就是指Framebuffer的长度、宽度以及颜色深度等信息。

这两个命令字相关的结构体有两个:struct fb_fix_screeninfo和struct fb_var_screeninfo。






这两个结构体都比较大,前者用于保存Framebuffer设备的固定信息,后者用于保存Framebuffer设备的可变信息。

在调用ioctl()的时候,要用到这两个结构体。

应用程序中通常要用到struct fb_var_screeninfo的下面这几个字段:

xres、yres、bits_per_pixel,分别表示x轴的分辨率、y轴的分辨率以及每像素的颜色深度(颜色深度的单位为bit/pixel),其类型定义都是无符号32位整型数。

http://hi.baidu.com/atoe/blog/item/e8da6416912a8a4a20a4e94f.html

http://hi.baidu.com/excellentderek/blog/item/f387e64e24b713cdd0c86a59.html

图形系统开发基础(挺详细)

http://linux.chinaunix.net/bbs/thread-1063136-1-1.html

又一个framebuffer编程的例子。

-------------------------------------
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <linux/fb.h>
#include <sys/mman.h>
#include <string.h>
#include <stdlib.h>

char *fb_addr;
unsigned fb_size;

int print_screen(char *buf,int width,int height);

int main(int argc,char *argv[])
{
int screen_fbd=0;

struct fb_fix_screeninfo fb_fix;
struct fb_var_screeninfo fb_var;

char *env=NULL;

short *picture;

env="/dev/fb0";

screen_fbd=open(env,O_RDWR);

printf("Success opening framebuffer device %s/n",env);

ioctl(screen_fbd,FBIOGET_FSCREENINFO,&fb_fix);

printf("fb_fix.line_length=%d/n",fb_fix.line_length);
printf("fb_fix.accel=%d/n",fb_fix.accel);

ioctl(screen_fbd,FBIOGET_VSCREENINFO,&fb_var);

printf("fb_var.xres=%d/n",fb_var.xres);
printf("fb_var.yres=%d/n",fb_var.yres);

fb_size=fb_var.yres*fb_fix.line_length;

fb_addr=(char *)mmap(NULL,fb_size,PROT_READ|PROT_WRITE,MAP_SHARED,screen_fbd,0);
/*fb_addr的获取,是很核心的步骤,表示成功获得了framebuffer设备*/

picture=(char *)malloc(fb_var.yres*fb_fix.line_length);
memset(picture,0xFF,fb_var.yres*fb_fix.line_length);
/*注意,这里对颜色的赋值只是一次赋一半值,也就是一个字节,8bit*/
/*而事实上,一个像素的颜色值是16bit*/
/*0xFFFF就是白色*/
/*介绍一下16bit的颜色的类型,颜色是由RGB组成,如果是565排列,
则依次为Red Green Blue
11111 111111 11111
*/

print_screen(picture,fb_var.xres,fb_var.yres);

return 0;
}

int print_screen(char *buf,int width,int height)
{
short *t_data=(short *)buf;

short *t_fb_addr=(short *)fb_addr;

int bytew=width<<1; /*像素数乘以2即是字节数,因为颜色深度是2个字节(16bit)*/

while(--height>=0)
{
memcpy(t_fb_addr,t_data,bytew); /*一行的数据赋值*/
t_fb_addr += width;
t_data += width;
}
}

分享到:
评论

相关推荐

    js-rfb:RFB协议的前端JavaScript实现

    在IT领域,远程桌面协议(Remote Framebuffer Protocol,简称RFB)是一种常用于实现远程控制和桌面共享的技术。它允许用户通过网络连接到另一台计算机,实时查看和操作其图形界面。RFB协议以其简单、高效的特点被...

    Linux远程终端管理系统

    它基于RFB(Remote Framebuffer)协议,可以跨平台使用。配置VNC通常包括安装VNC服务器(如 TightVNC 或 RealVNC)在远程机器上,然后在本地机器上使用VNC客户端(如 TigerVNC 或 RealVNC Viewer)连接。 标签...

    VNC LINUX远程桌面

    VNC的核心概念是服务器端(VNC Server)和客户端(VNC Viewer),它们之间的通信依赖于RFB(Remote Framebuffer)协议,该协议负责将远程计算机的屏幕内容传输到本地,并接收本地的输入指令。 VNC在Linux上的安装...

    vnc远程控制linux,windows方法.pdf

    VNC(Virtual Network Computing)是一种远程桌面共享系统,它通过RFB(Remote FrameBuffer)协议实现对远程计算机的控制。VNC技术具有跨平台性,可以在不同操作系统上运行VNC Viewer与VNC Server,如Linux、Windows...

    vnc远程控制linux,windows方法归纳.pdf

    VNC的核心是RFB(Remote FrameBuffer)协议,它允许用户将本地的键盘和鼠标操作传输到远程计算机,同时接收远程计算机的屏幕更新。这种技术的一个关键优点是其平台无关性,即VNC Viewer(客户端)可以连接到运行VNC ...

    vnc-installer-x86_win32(中文版)

    VNC的核心原理是基于RFB(Remote Framebuffer)协议,它将远程计算机的屏幕内容实时传输到本地,同时接收本地用户的输入指令,从而实现远程控制。VNC适用于多种操作系统,包括Windows、Linux、Mac OS等,具有跨平台...

    VNC-5.1.0-Windows.rar

    1. **VNC协议**:VNC协议是基于RFB(Remote Framebuffer)协议的,它允许客户端与服务器之间实时同步屏幕内容。这种协议简单且高效,适用于各种网络环境。 2. **跨平台**:虽然这里的压缩包是Windows版本,但VNC...

    vnc + 密钥

    VNC的核心在于其轻量级的设计,它使用RFB(Remote Framebuffer)协议,使得用户可以实时地看到远程计算机的屏幕变化,并进行各种操作。 标题中的“vnc + 密钥”指的是在使用VNC时,为了确保连接的安全性和隐私性,...

    tigervnc64-1.5.0.rar

    它利用RFB(Remote FrameBuffer)协议进行通信,将远程计算机的屏幕内容编码成图像流,然后传输到本地客户端。客户端再解码这些图像并在本地显示器上显示,同时处理用户的输入事件,如鼠标点击和键盘按键,再将这些...

    VNCView-master

    VNC协议基于RFB(Remote FrameBuffer)协议,它的工作原理是将远程计算机的屏幕内容作为帧缓存传输到本地,然后在本地设备上进行渲染。这种设计使得VNC具有跨平台性,可以在多种操作系统上运行,如Windows、Linux、...

    vnc 客户端软件 客户端软件

    VNC技术基于RFB(Remote FrameBuffer)协议,提供了跨平台的远程控制能力,适用于Windows、Mac OS X、Linux等多种操作系统。 VNC客户端软件是实现VNC连接的关键部分,它负责建立与VNC服务器之间的通信。在标题和...

    VNC Enterprise Edition 企业版

    VNC 基于 RFB(Remote Framebuffer)协议,它工作的方式是将远程计算机的屏幕内容作为帧缓冲区处理,然后将这些帧传输到客户端,使得用户可以实时看到远程桌面的变化。同时,用户的键盘和鼠标输入也会被转发到远程...

    libvncserver0.9.9移植到开发板

    VNC是一种基于RFB(Remote FrameBuffer)协议的远程桌面软件,通过它,用户可以在远程设备上显示并控制本地桌面。libvncserver0.9.9是该库的一个特定版本,包含了对多种特性与优化的支持。 移植过程的第一步是准备...

    VNC远程控制4.0版

    VNC(Virtual Network Computing)远程控制技术是一种基于RFB(Remote Framebuffer)协议的图形桌面共享系统,允许用户通过网络远程访问和控制另一台计算机的桌面。VNC 4.0版是该软件的一个重要版本,它为网络管理员...

    vnc server配置

    VNC (Virtual Network Computing) 是一种广泛使用的远程桌面共享系统,它使用RFB (Remote Framebuffer) 协议来传输键盘输入、鼠标点击以及屏幕更新等信息。在Linux环境中配置VNC Server可以方便地实现远程桌面访问...

    VNC Viewer.zip

    VNC技术基于RFB(Remote Framebuffer)协议,使得用户可以实时操作远程系统的桌面,无论是进行系统管理、软件开发还是日常办公,都是一个非常实用的工具。 在Linux环境中,VNC Viewer通常配合VNC服务器使用,如 ...

    vnc-E4_2_9-x86_win32_CHS.exe

    1. **VNC协议**: VNC基于RFB(Remote Framebuffer)协议,工作原理是将远程计算机的屏幕内容作为帧缓冲区传输到本地客户端,使得用户可以像操作本地计算机一样操作远程电脑。VNC支持多种操作系统,如Windows、Linux...

    VNC Viewer

    VNC技术基于RFB(Remote Framebuffer)协议,这是一种轻量级的远程桌面协议,其工作原理是将远程计算机的屏幕内容编码并发送到本地,同时接收本地的输入指令并转发给远程计算机。VNC Viewer作为客户端,负责与VNC...

    WinVNC源代码(编辑)

    3. **VNC协议实现**:源代码中会包含VNC协议的具体实现,包括基本的RFB(Remote Framebuffer)协议,以及可能的扩展如TLS加密、身份验证机制等。 4. **用户界面**:WinVNC的用户界面可能包括图形化设置向导,帮助...

Global site tag (gtag.js) - Google Analytics