fb sample code

本文展示了一个简单的C程序示例,该程序通过直接操作Linux系统的帧缓冲区接口(/dev/fb0)来访问和控制屏幕显示。主要内容包括打开帧缓冲设备文件、获取屏幕基本信息等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include 
#include 
#include 
#include 
#include 

int main () {
	int fp=0;
	struct fb_var_screeninfo vinfo;
	struct fb_fix_screeninfo finfo;
	fp = open ("/dev/fb0",O_RDWR);

	if (fp < 0){
		printf("Error : Can not open framebuffer device/n");
		exit(1);
	}

	if (ioctl(fp,FBIOGET_FSCREENINFO,&finfo)){
		printf("Error reading fixed information/n");
		exit(2);
	}
	
	if (ioctl(fp,FBIOGET_VSCREENINFO,&vinfo)){
		printf("Error reading variable information/n");
		exit(3);
	}

	printf("The mem is :%d/n",finfo.smem_len);
	printf("The line_length is :%d/n",finfo.line_length);
	printf("The xres is :%d/n",vinfo.xres);
	printf("The yres is :%d/n",vinfo.yres);
	printf("bits_per_pixel is :%d/n",vinfo.bits_per_pixel);
	close (fp);
}


#include 
#include 
#include 
#include 
#include 

int main () {
	int fp=0;
	struct fb_var_screeninfo vinfo;
	struct fb_fix_screeninfo finfo;
	long screensize=0;
	char *fbp = 0;
	int x = 0, y = 0;
	long location = 0;
	fp = open ("/dev/fb0",O_RDWR);

	if (fp < 0){
		printf("Error : Can not open framebuffer device/n");
		exit(1);
	}

	if (ioctl(fp,FBIOGET_FSCREENINFO,&finfo)){
		printf("Error reading fixed information/n");
		exit(2);
	}
	
	if (ioctl(fp,FBIOGET_VSCREENINFO,&vinfo)){
		printf("Error reading variable information/n");
		exit(3);
	}

		screensize = vinfo.xres * vinfo.yres * vinfo.bits_per_pixel / 8;
	/*这就是把fp所指的文件中从开始到screensize大小的内容给映射出来,得到一个指向这块空间的指针*/
	fbp =(char *) mmap (0, screensize, PROT_READ | PROT_WRITE, MAP_SHARED, fp,0);
  	if ((int) fbp == -1)
    	{
     	 	printf ("Error: failed to map framebuffer device to memory./n");
      		exit (4);
    	}
/*这是你想画的点的位置坐标,(0,0)点在屏幕左上角*/
	 x = 100;
  	 y = 100;
 	location = x * (vinfo.bits_per_pixel / 8) + y  *  finfo.line_length;

  *(fbp + location) = 100;		/* 蓝色的色深 */		/*直接赋值来改变屏幕上某点的颜色*/
  *(fbp + location + 1) = 15;	/* 绿色的色深*/		 
  *(fbp + location + 2) = 200;	/* 红色的色深*/		 
  *(fbp + location + 3) = 0;		/* 是否透明*/		
  munmap (fbp, screensize);	/*解除映射*/
  close (fp);				/*关闭文件*/
  return 0;

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值