您的位置 首页 软件

stm32 读取bmp图画的信息

在sd卡文件系统下读取bmp图像和显示是比较容易的,为了给jpeg解码提供一个过程,这里我先介绍一下bmp的读取方式这里主要是介绍读取bmp…

在sd卡文件体系下读取bmp图画和显现是比较简单的,为了给jpeg解码供给一个进程,这儿我先介绍一下bmp的读取办法

这儿主要是介绍读取bmp信息的一些办法

首要说一下BMP的4个组成部分:

1.文件头信息块

0000-0001:文件标识,为字母ASCII码“BM”。
0002-0005:文件巨细。
0006-0009:保存,每字节以“00”填写。
000A-000D:记载图画数据区的开端方位。各字节的信息顺次意义为:文件头信息块巨细,图画描绘信息块的巨细,图画色彩表的巨细,保存(为01)。

2.图画描绘信息块

000E-0011:图画描绘信息块的巨细,常为28H。
0012-0015:图画宽度。
0016-0019:图画高度。
001A-001B:图画的plane总数(恒为1)。
001C-001D:记载像素的位数,很重要的数值,图画的色彩数由该值决议。
001E-0021:数据紧缩办法(数值位0:不紧缩;1:8位紧缩;2:4位紧缩)。
0022-0025:图画区数据的巨细。
0026-0029:水平每米有多少像素,在设备无关位图(.DIB)中,每字节以00H填写。
002A-002D:笔直每米有多少像素,在设备无关位图(.DIB)中,每字节以00H填写。
002E-0031:此图画所用的色彩数,如值为0,表明一切色彩相同重要。

3.色彩表

  色彩表的巨细依据所运用的色彩形式而定:2色图画为8字节;16色图画位64字节;256色图画为1024字节。其间,每4字节表明一种色彩,并以B (蓝色)、G(绿色)、R(赤色)、alpha(32位位图的透明度值,一般不需求)。即首要4字节表明色彩号1的色彩,接下来表明色彩号2的色彩,依此类推。

4.图画数据区

  色彩表接下来位为位图文件的图画数据区,在此部分记载着每点像素对应的色彩号,其记载办法也随色彩形式而定,既2色图画每点占1位(8位为1字节);16色图画每点占4位(半字节);256色图画每点占8位(1字节);真五颜六色图画每点占24位(3 字节)。所以,整个数据区的巨细也会随之改变。究其规则而言,可的出如下计算公式:图画数据信息巨细=(图画宽度*图画高度*记载像素的位数)/8。

前三个 是咱们今日要读取的

首要咱们先用 f_open 找到咱们要读取的图片文件的信息尤其是图片开端的簇和指针地址。
CurFile=BmpFileName;

F_Open(CurFile);//翻开文件
F_Read(CurFile,jpg_buffer);//读出512个字节
pbmp=(BITMAPINFO*)jpg_buffer;//得到BMP的头部信息

这是我摘借的几句程序
第二句 把读出的bmp文件信息存在buffer中
第三句 这句话是咱们今日要点说的
=(BITMAPINFO*)jpg_buffer 强制转换为 (BITMAPINFO)指针类型

typedef __packed struct
{
BITMAPFILEHEADER bmfHeader;// 1.文件头信息块
BITMAPINFOHEADER bmiHeader;//2.图画描绘信息块
RGBQUAD bmiColors[1];// 3.色彩表
}BITMAPINFO;

第3句话 强制转化buffer数组 到这个结构体
实际上数组和结构体是相同的 不相同的是结构体 有个最小结构对齐的问题(这个在本坛有具体解说)。
对照着楼上各个信息快 信息字节 写出结构体:
//BMP头文件
typedef __packed struct
{
WORDbfType ; //文件标志.只对BM,用来辨认BMP位图类型
DWORD bfSize ; //文件巨细,占四个字节
WORDbfReserved1 ;//保存
WORDbfReserved2 ;//保存
DWORD bfOffBits ;//从文件开端到位图数据(bitmap data)开端之间的的偏移量
}BITMAPFILEHEADER ;
//BMP信息头
typedef __packed struct
{
DWORD biSize ; //阐明BITMAPINFOHEADER结构所需求的字数。
LONGbiWidth ; //阐明图象的宽度,以象素为单位
LONGbiHeight ; //阐明图象的高度,以象素为单位
WORDbiPlanes ; //为方针设备阐明位面数,其值将总是被设为1
WORDbiBitCount ; //阐明比特数/象素,其值为1、4、8、16、24、或32
DWORD biCompression ;//阐明图象数据紧缩的类型。其值可所以下述值之一:
//BI_RGB:没有紧缩;
//BI_RLE8:每个象素8比特的RLE紧缩编码,紧缩格局由2字节组成(重复象素计数和色彩索引);
//BI_RLE4:每个象素4比特的RLE紧缩编码,紧缩格局由2字节组成
//BI_BITFIELDS:每个象素的比特由指定的掩码决议。
DWORD biSizeImage ;//阐明图象的巨细,以字节为单位。当用BI_RGB格局时,可设置为0
LONGbiXPelsPerMeter ;//阐明水平分辨率,用象素/米表明
LONGbiYPelsPerMeter ;//阐明笔直分辨率,用象素/米表明
DWORD biClrUsed ; //阐明位图实际运用的五颜六色表中的色彩索引数
DWORD biClrImportant ; //阐明对图象显现有重要影响的色彩索引的数目,如果是0,表明都重要。
}BITMAPINFOHEADER ;
//五颜六色表
typedef __packed struct
{
BYTE rgbBlue ; //指定蓝色强度
BYTE rgbGreen ; //指定绿色强度
BYTE rgbRed ; //指定赤色强度
BYTE rgbReserved ;//保存,设置为0
}RGBQUAD ;
这样咱们能够经过结构体 得到bmp文件任何一个信息。

下次接着来 直到显现解码显现然后再上传移植文件

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/ruanjian/273225.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部