保存Framebuffer中RGB565内容为565BMP格式图片

这篇博客介绍了如何将含有RGB565格式数据的帧缓冲区转换并保存为565格式的BMP图片,以确保颜色正确显示。内容涉及BMP位图的基本知识和文件头结构体的填充细节。
摘要由CSDN通过智能技术生成

当前framebuffer的数据为rgb565格式写入的,所以,数据要读取出来保存为565格式的bmp才能正常显示,颜色才不会偏差。
Bmp位图基础知识链接:《windows位图结构详解》https://blog.csdn.net/mfcing/article/details/7451670
注意:注重文件信息头图、信息头的结构体填充。

/*
 *
 *当biCompression成员的值是BI_RGB时,它没有调色板。16位中,最低的5位表示蓝色分量,中间的5位表示绿色分量,
高的5位表示红色分量,一共占用了15位,最高的一位保留,设为0。这种格式也被称作555 16位位图。如果biCompression
成员的值是BI_BITFIELDS,那么情况就复杂了,首先是原来调色板的位置被三个DWORD变量占据,称为红、绿、蓝掩码。
分别用于描述红、绿、蓝分量在16位中所占的位置。在Windows 95(或98)中,系统可接受两种格式的位域:555和565,
在555格式下,红、绿、蓝的掩码分别是:0x7C00、0x03E0、0x001F,而在565格式下,它们则分别为:0xF800、0x07E0、0x001F。
你在读取一个像素之后,可以分别用掩码“与”上像素值,从而提取出想要的颜色分量(当然还要再经过适当的左右移操作)。
在NT系统中,则没有格式限制,只不过要求掩码之间不能有重叠。(注:这种格式的图像使用起来是比较麻烦的,不过因为它的显示
效果接近于真彩,而图像数据又比真彩图像小的多,所以,它更多的被用于游戏软件)。
 *
 *
 *
 *
 *
 * */
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <linux/fb.h>
#include <sys/ioctl.h>
#include <string.h>

#undef RGB565
typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef unsigned int DWORD;
typedef long LONG;


typedef struct tagBITMAPFILEHEADER {
   
	WORD  bfType;			//位图文件的类型,在Windows中,此字段的值总为‘BM’(1-2字节)
	DWORD bfSize;			//位图文件的大小,以字节为单位(3-6字节,低位在前)
	WORD  bfReserved1;		//位图文件保留字,必须为0(7-8字节)
	WORD  bfReserved2;		//位图文件保留字,必须为0(9-10字节)
	DWORD bfOffBits;		//位图数据的起始位置,以相对于位图(11-14字节,低位在前)
}__attribute__((packed)) BITMAPFILEHEADER, *PBITMAPFILEHEADER;

typedef struct tagBITMAPINFOHEADER {
   
	DWORD biSize;			//本结构所占用字节数(15-18字节)
	LONG  biWidth;			//位图的宽度,以像素为单位(19-22字节)
	LONG  biHeight;			//位图的高度,以像素为单位(23-26字节
	WORD  biPlanes;			//目标设备的级别,必须为1(27-28字节)
	WORD  biBitCount;		//每个像素所需的位数,必须是1(双色),(29-30字节)//4(16色),8(256色)16(高彩色)或24(真彩色)之一
	DWORD biCompression;		//位图压缩类型,必须是0(不压缩),(31-34字节)	//1(BI_RLE8压缩类型)或2(BI_RLE4压缩类型)之一
	DWORD biSizeImage;		/
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值