BMP格式详解

2023-05-16

介绍

  数字图像在外存储器设备中的存储形式是图像文件,图像必须按照某个已知的、公认的数据存储顺序和结构进行存储,才能使不同的程序对图像文件顺利进行打开或存盘操作,实现数据共享。图像数据在文件中的存储顺序和结构称为图像文件格式。目前广为流传的图像文件格式有许多种,常见的格式包括BMP、 GIF、JPEG、TIFF、PSD、DICOM、MPEG等。在各种图像文件格式中,一部分是由某个软硬件厂商提出并被广泛接受和采用的格式,例如 BMP、GIF和PSD格式;另一部分是由各种国际标准组织提出的格式,例如JPEG、TIFF和DICOM,其中JPEG是国际静止图像压缩标准组织提出的格式,TIFF是由部分厂商组织提出的格式,DICOM是医学图像国际标准组织提出的医学图像专用格式。

  BMP文件是Windows操作系统所推荐和支持的图像文件格式,是一种将内存或显示器的图像数据不经过压缩而直接按位存盘的文件格式,所以称为位图(bitmap)文件,因其文件扩展名为BMP,故称为BMP文件格式,简称BMP文件。

  BMP文件总体上由4部分组成,分别是位图文件头、位图信息头、调色板和图像数据

  • 位图文件头(bitmap-file header)
  • 位图信息头(bitmap-information header)
  • 彩色表/调色板(color table)
  • 位图数据(bitmap-data)

数据结构

//位图文件头
typedef __packed struct
{
    uint16_t  bfType ;     //文件标志.固定为'BM',用来识别BMP位图类型
    uint32_t  bfSize ;	   //文件大小,占四个字节
    uint16_t  bfReserved1 ;//保留,总为0
    uint16_t  bfReserved2 ;//保留,总为0
    uint32_t  bfOffBits ;  //从文件开始到位图数据(bitmap data)开始之间的的偏移量
}BITMAPFILEHEADER ;

//位图信息头
typedef __packed struct
{
    uint32_t biSize ;		   	//BITMAPINFOHEADER结构所需要的字数。
    long  biWidth ;		   	    //图象的宽度,以象素为单位 
    long  biHeight ;	   	    //图象的高度,以象素为单位 
    uint16_t  biPlanes ;	    //为目标设备说明位面数,其值将总是被设为1 
    uint16_t  biBitCount ;	   	//比特数/象素,其值为1、4、8、16、24、或32
    uint32_t biCompression ;  	//图象数据压缩的类型。其值可以是下述值之一:
	                              //BI_RGB:没有压缩;
	                              //BI_RLE8:每个象素8比特的RLE压缩编码,压缩格式由2字节组成(重复象素计数和颜色索引);  
                                  //BI_RLE4:每个象素4比特的RLE压缩编码,压缩格式由2字节组成
  	                              //BI_BITFIELDS:每个象素的比特由指定的掩码决定。
    uint32_t biSizeImage ;		//图象的大小,以字节为单位。当用BI_RGB格式时,可设置为0  
    long  biXPelsPerMeter ;	    //水平分辨率,用象素/米表示
    long  biYPelsPerMeter ;	    //垂直分辨率,用象素/米表示
    uint32_t biClrUsed ;	  	//位图实际使用的彩色表中的颜色索引数
    uint32_t biClrImportant ; 	//对图象显示有重要影响的颜色索引的数目,如果是0,表示都重要。 
}BITMAPINFOHEADER ;

//调色板
typedef __packed struct 
{
    uint8_t rgbBlue ;    //指定蓝色强度
    uint8_t rgbGreen ;	 //指定绿色强度 
    uint8_t rgbRed ;	 //指定红色强度 
    uint8_t rgbReserved ;//保留,设置为0 
}RGBQUAD ;

typedef __packed struct
{ 
	BITMAPFILEHEADER bmfHeader;     //位图文件头
	BITMAPINFOHEADER bmiHeader;     //位图信息头 
	uint32_t RGB_MASK[3];			//调色板用于存放RGB掩码.
	//RGBQUAD bmiColors[256];  
}BITMAPINFO; 

8位色图片实例讲解

下面举个实例来讲解:
在Winhex中打开cat2.bmp图像文件((8位色BMP图像cat2.bmp,分辨率为 200×153,文件大小为31 680字节))

位图文件头(bitmap-file header)

  位图文件头(bitmap-file header)包含了图像类型、图像大小、图像数据存放地址和两个保留未使用的字段。
  打开WINGDI.h文件,搜索"BITMAPFILEHEADER"就可以定位到BMP文件的位图文件头的数据结构定义。

typedef __packed struct
{
    uint16_t  bfType ;     //文件标志.固定为'BM',用来识别BMP位图类型
    uint32_t  bfSize ;	   //文件大小,占四个字节
    uint16_t  bfReserved1 ;//保留,总为0
    uint16_t  bfReserved2 ;//保留,总为0
    uint32_t  bfOffBits ;  //从文件开始到位图数据(bitmap data)开始之间的的偏移量
}BITMAPFILEHEADER ;

对应图片开始的14个字节数据:
在这里插入图片描述

十六进制值描 述
42 4DBM的ASCII值,在Windows中的BMP文件标识符
C0 7B 00 007B C0h=31680,是cat2文件的大小
00 00 00 00保留值,总为0
36 04 00436h=1078,是图像数据的地址,即文件头+信息头+调色板的长度

位图信息头(bitmap-information header)

  位图信息头(bitmap-information header)包含了位图信息头的大小、图像的宽高、图像的色深、压缩说明图像数据的大小和其他一些参数。
  打开WINGDI.h文件,搜索"tagBITMAPINFOHEADER"就可以定位到BMP文件的位图信息头的数据结构定义。

typedef __packed struct
{
    uint32_t biSize ;		   	//BITMAPINFOHEADER结构所需要的字数。
    long  biWidth ;		   	    //图象的宽度,以象素为单位 
    long  biHeight ;	   	    //图象的高度,以象素为单位 
    uint16_t  biPlanes ;	    //为目标设备说明位面数,其值将总是被设为1 
    uint16_t  biBitCount ;	   	//比特数/象素,其值为1、4、8、16、24、或32
    uint32_t biCompression ;  	//图象数据压缩的类型。其值可以是下述值之一:
	                              //BI_RGB:没有压缩;
	                              //BI_RLE8:每个象素8比特的RLE压缩编码,压缩格式由2字节组成(重复象素计数和颜色索引);  
                                  //BI_RLE4:每个象素4比特的RLE压缩编码,压缩格式由2字节组成
  	                              //BI_BITFIELDS:每个象素的比特由指定的掩码决定。
    uint32_t biSizeImage ;		//图象的大小,以字节为单位。当用BI_RGB格式时,可设置为0  
    long  biXPelsPerMeter ;	    //水平分辨率,用象素/米表示
    long  biYPelsPerMeter ;	    //垂直分辨率,用象素/米表示
    uint32_t biClrUsed ;	  	//位图实际使用的彩色表中的颜色索引数
    uint32_t biClrImportant ; 	//对图象显示有重要影响的颜色索引的数目,如果是0,表示都重要。 
}BITMAPINFOHEADER ;

在这里插入图片描述

十六进制值描 述
28 00 00 00cat2.bmp图像的位图信息头大小,40字节
C8 00 00 0000 00 00 C8 = 200,是cat2图像的宽度,单位像素
99 00 00 0000 00 00 99 = 153,是cat2图像的高度,单位像素
01 00总是1
08 0000 08 = 8,cat2图像的色深,即2的8次幂等于256色
00 00 00 00压缩方式,0表示不压缩
8A 77 00 0000 00 77 8A = 30602,是cat2图像的图像数据大小,单位字节
12 0B 00 0000 00 0B 12 = 2834,cat2图像的水平分辨率,单位像素/m
12 0B 00 0000 00 0B 12 = 2834,cat2图像的垂直分辨率,单位像素/m
00 00 00 00cat2图像使用的颜色数,0表示使用全部颜色
00 00 00 00cat2图像中重要的颜色数,0表示所有颜色都重要

彩色表/调色板(color table)

接下来是调色板数据,根据BMP文件结构的定义,因为cat2.bmp图像是256色的位图,所以应该有256个调色板,每个调色板占4字节,整 个调色板一共1024字节大小。 cat2.bmp图像文件的调色板数据如下图:
在这里插入图片描述
cat2.bmp图像的调色板地址从00000036h开始存储
在这里插入图片描述
cat2.bmp图像的调色板数据结束地址是00000435h

cat2.bmp图像的调色板地址从00000036h开始到00000435h结束,即00000435h - 00000036h + 1 =400h = 1024 bytes。
如果想查看cat2图像的调色板对应的实际显示颜色,可以使用Adobe Photoshop CS打开cat2.bmp,在Adobe Photoshop CS的菜单栏中选择"图像"→"模式"→"颜色表",即可观看cat2的调色板
在这里插入图片描述
  cat2.bmp的调色板颜色和十六进制数据是一一对应的。在Adobe Photoshop CS的调色板上单击任何一个像素的颜色即可弹出一个拾色器对话框显示该像素颜色的详细组成信息。cat2.bmp调色板和cat2.bmp的十六进制数据 的对应关系如图。
在这里插入图片描述

位图数据(bitmap-data)

  接下来就是位图数据了,根据BMP文件结构的定义,如果一个图像有调色板,那么紧跟在调色板后面的是图像的数据,这些数据不是实际的颜色值,而是指向调色板数组的索引,根据索引来获取调色板中的颜色,如图
在这里插入图片描述
  因为cat2.bmp是256色的位图,即采用了8位色深作为指向调色板数组的索引,所以根据上图显示的数据可以得知:49 49 49 B1 49 49 49 49 49 99。表示cat2.bmp位图左下角第1个像素的颜色等于调色板[49];第2个像素的颜色等于调色板[49] ;第3个像素的颜色等于调色板[49] ;第4个像素的颜色等于调色板[B1];第5个像素的颜色等于调色板[49] ……依此类推。

24位色图片实例讲解

  cat1.bmp图像是24位色图像,根据BMP文件结构定义得知,cat1.bmp图像没有调色板,图像数据存储的是实际的颜色数据,每个像素用 3字节表示,分别是红绿蓝。由于cat1.bmp和cat2.bmp的位图文件头和位图信息头结构一样,所以cat1.bmp的位图文件头和位图信息头可以参考上面对cat2.bmp的分析,下面从cat1.bmp的位图信息头结束的位置开始分析,如图
在这里插入图片描述
  上图可以看到表示每个像素的红绿蓝三色的值,实际存放的时候是倒过来存放的,在分析BMP图像格式时需要注意这点。

省略文件头重复数据

  通过上面对BMP文件存储结构的分析发现,BMP文件的位图文件头和位图信息头存在着大量的重复数据。如果存储大量同一色深的BMP位图,必然会浪费大量存储空间,所以很多时候游戏编程人员都会去掉BMP文件头和信息头,只保留几个必要的信息和图像数据,那么BMP文件头和信息头中哪几个字段是必须 保留的呢?

  使用Winhex的文件比较功能比较两个24位色深的BMP图像文件,观察两个文件的文件头和信息头有什么不同的地方,如图。
在这里插入图片描述
  从上图可以看出,两个色深相同的BMP图像的文件头和信息头一共有4处不同的地方,分别是文件头的文件大小、信息头的图像宽度、图像高度和图像数据大小。

  所以很多时候,游戏编程人员只保留图像文件的文件大小、图像宽度、图像高度和图像数据大小信息,甚至有时不需要保留文件大小这个数值,使用图像数据大小数值即可。

  在分析未知文件存储格式时,如果遇到去掉了文件头的文件时,如上面所说的BMP文件,会给分析未知文件格式带来一定的困难。这时需要使用十六进制编 辑器的文件比较功能,观察两个同类的未知文件格式寻找某些潜在的规律,如果实在观察不出规律的,那只能使用白盒分析方法,对调用此未知文件格式的程序进行反汇编跟踪调试了。当然,有时灵感和运气也很重要。

位图文件大小的精准计算方法

8位色

  8位(bit)位图:图片中有28=256种颜色,具体哪256种颜色可由调色板灵活规定,因此每个像素点最多有256种情况(颜色),用1字节来表示就可以了。
  一幅512×512的8位位图大小计算方法:
位图文件头(14字节00000000h开始到0000000Dh)+
位图信息头(40字节0000000Eh开始到00000035h)+
调色板(256色,每个颜色4字节,256*4=1024, 00000036h开始到00000435h)+
实际像素点占内存(512×512×1字节)=263 222字节(Byte)。

24位色

  24位位图:又名RGB真彩色图,含224=16 777 216=16M色,没有彩色表,原因上文已说明。每个像素点由3个字节(十六进制码6位)表示,每个字节负责控制一种颜色,分别为蓝(Blue)、绿(Green)、红(Red)。
  一幅256×256的24位位图大小计算方法:
位图文件头(14字节00000000h开始到0000000Dh)+
位图信息头(40字节0000000Eh开始到00000035h)+
实际像素点占内存(256×256×3字节)=196 662字节(Byte)。

补零

  需要注意的是,Windows有“补零”的习惯!即要求位图的每一行像素所占字节数必须被4整除。若不能倍4整除,则在该位图每一行的十六进制码末尾“补”1至3个字节的“00”。

  例如:一幅宽253×高256的24位位图,微软在生成该图为实际文件时,计算每一行像素所占字节=宽253×3字节=759字节,检验其被4除余1,则在每行的十六进制码末尾加1个字节,补“00”,变为760字节。因此我们计算该图大小时应先判断是否“补零”,再得出算法:该图大小=位图文件头(14字节)+位图信息头(40字节)+实际像素点占内存(高256×每行760字节)=194614字节(Byte)。
   有趣的是,“补零”只针对位图的宽进行检验,一幅宽256×高253的24位位图,其大小=位图文件头(14字节)+位图信息头(40字节)+实际像素点占内存(高253×每行768字节)=194358字节(Byte)< 196 662字节(Byte)。这样,只是把此图像的宽和高颠倒,图像所占内存竟然变小了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

BMP格式详解 的相关文章

  • matlab 存成bmp格式,MAT、BMP、PNG文件格式说明及MATLAB中文件的保存方式

    在使用MATLAB处理图像的过程中 xff0c 保存文件的时候 xff0c 常常不知道保存为哪种格式较为合适 xff0c 因此 xff0c 对不同格式的有一个简单的了解是必要的 MAT文件 xff1a mat数据格式是MATLAB的数据存储
  • BMP格式详解

    BMP xff08 全称Bitmap xff09 是Windows操作系统中的标准图像文件格式 xff0c 可以分成两类 xff1a 设备相关位图 xff08 DDB xff09 和设备无关位图 xff08 DIB xff09 xff0c
  • bmp转jpg(使用libjpeg)

    jpg压缩原理可以参考这篇文章http hi baidu com tiandsp item f5a2dcde6ef1405bd73aae41 xff0c 我很早以前转的一篇文章 没有使用libjpeg的压缩代码可以看看这篇文章http hi
  • 计算机图像显示原理与BMP图像文件格式

    本篇文章详细讲述图像文件 里面有一些阐述为个人理解 如有不对的地方欢迎指正 后续会修正补全 计算机图像显示原理与BMP图像的文件格式 一 计算机图像显示原理简述 1 计算机图像分类 2 显示 3 彩色图转灰白图原理 二 BMP图像 1 BM
  • 将摄像头输出的原始数据文件转换成bmp图像

    引言 从摄像头和传感器获得的视频数据是没有办法直接被电脑识别的 所以需要进行转化 我昨天在做项目的时候遇到了这个问题 根据查阅相关资料 实现了将摄像头输出的原始数据文件转换成bmp图像的程序 语言 C C 测试平台 VC6 0 先把bmp
  • FPGA-仿真读写bmp图片

    文章目录 位图说明 位图 Verilog代码实现 python处理代码 附 最近想完成FPGA图像处理 由于没有开发板 就像通过仿真完成 之前像的是通过python 将图像转化为txt文本 最后利用verilog 读取txt文件导入 对像素
  • macOS 软件推荐&避雷指南 - 让 mac 更像 windows 的装机必备软件

    网络上有很多 macOS 软件推荐的文章 但是那些文章大部分有下面的问题 没有结合使用场景 没有差评 从来不会说一个软件有什么缺点 是否稳定 所以这篇文章就围绕下面 2 点展开 安装哪些软件 可以让 macOS 的体验更加接近 window
  • BMP文件格式详解(BMP file format)

    BMP文件格式 又称为Bitmap 位图 或是DIB Device Independent Device 设备无关位图 是Windows系统中广泛使用的图像文件格式 由于它可以不作任何变换地保存图像像素域的数据 因此成为我们取得RAW数据的
  • bmp文件

    文件格式 格式组成 典型的BMP 图像文件由四部分组成 1 位图头文件数据结构 它包含BMP图像文件的类型 显示内容等信息 2 位图信息数据结构 它包含有BMP图像的宽 高 压缩方法 以及定义颜色等信息 3 调色板 这个部分是可选的 有些位
  • 如何生成动态 GRF 图像以进行 ZPL ZEBRA 打印

    我有个问题 我正在生成动态 BMP 图像并尝试通过 ZPL 命令将其发送到 ZEBRA 打印机 我需要将 BMP 图像转换为 GRF 图像 我认为 BMP 图像提取的十六进制不正确 打印的图像模糊且不正确 这是我的代码 string bit
  • 如何将 Wbmp 转换为 Png?

    在 Google 上花了很多时间研究这个问题后 我找不到在 C 中将 Wbmp 图像转换为 Png 格式的示例 我从互联网上下载了一些 Wbmp 图像 并使用二进制编辑器查看它们 有没有人有一种算法可以帮助我这样做 或者任何代码也会有帮助
  • Tensorflow:如何编码和读取bmp图像?

    我正在尝试读取 bmp 图像 对这些图像进行一些增强 将它们保存到 tfrecords 文件中 然后打开 tfrecords 文件并使用这些图像进行图像分类 我知道有一个 tf image encode jpeg 和一个 tf image
  • .BMP 文件可以存储在 HTA (HTML/VBScript) 中吗?

    我注意到在 FireFox 书签的备份中 显示在每个条目左侧的图标作为字符流保存在 A 标记中 例如 ICON data image png base64 iVBOR 删除数据以缩短示例 rkJggg 我有 3 个 BMP 文件 2 are
  • 使用 PIL 加载 RGBA 位图

    我尝试使用 PIL 将 32 位位图转换为 32 位 PNG from PIL import Image im Image open example bmp print im mode it prints RGB but expected
  • Android:将位图保存为 bmp 文件格式

    我内存中有一个位图 我需要将其保存在 bmp 文件中 使用bmp 文件格式 http en wikipedia org wiki BMP file format 有什么办法可以在Android上做到这一点吗 我读了很多建议使用 png 格式
  • 在 C# 中将所有内容转换为 JPG

    我有一个如下所示的函数 Convert To JPG public string AlltoJPG FileInfo foo Get file extension string fileExtension foo Extension Get
  • 如何将位图照片转换为十六进制颜色代码?

    我正在尝试为我的简历创建一个程序 但我在转换时遇到问题bitmap照片就是灰度照片转为十六进制 或者更好地称之为代码 如果颜色 有人可以帮助我吗 我尝试将其转换为Base64字符串但它不起作用 openFileDialog1 new Ope
  • 解压在中间停止并且输出文件填充零(黑色像素)?

    我正在尝试对 bmp 位图 文件应用 DCT 离散余弦变换 压缩 我有一个在 Turbo C 中运行的 c 文件 这实际上并不是压缩 但我试图实现 DCT 和 IDCT 代码如下 the image to be compressed is
  • Javax ImageIO IIOException 显然没有原因

    大家好 我有一个 Java 问题 对于我的高级研究课程 我已经基本完成 但我只需要分析我生成的图像中的一些数据 我不想将其标记为家庭作业 因为它不是任何必需作业的一部分 这是我自己想出的来收集结果的东西 我编写了一个程序来逐像素比较两个图像
  • bmp宽高比问题

    我一直在尝试了解 bmp 文件的工作原理 以便我可以渲染一些 Mandelbrot 设置图片并将它们输出为 bmp 文件 因为这似乎是最简单的方法之一 但由于某种原因 当我使用不是 1 的纵横比时 1 尽管它是 4 的幂 所以不需要填充 我

随机推荐

  • 可靠性udp传输大文件

    高级计算机网络大作业 可靠性udp传输大文件 实验数据zstd压缩1G文件 xff08 延迟100ms 丢包1 xff09 0 1G文件 xff08 延迟100ms 丢包1 xff09 0 01G文件 xff08 延迟100ms 丢包1 x
  • 一些奇怪问题的解决汇总

    vscode ssh远程连接 问题描述 xff1a Setting up SSH Host 192 168 78 133 details Initializing VS Code Server 一开始尝试了网络的各种方式 xff0c 比如删
  • 控制系统--系统结构图

    结构图基本单元 信号线 表示信号流向 引出点 表示信号引出 xff0c 被引出信号与原信号完全相同 或 从同一位置引出信号完全相同 比较点 将所有输入信号做代数运算 方框 表示信号经过传递函数为 H s
  • 字符串及处理之三: 使用TCHAR系列方案

    使用TCHAR系列方案编写程序 TCHAR是一种字符串类型 xff0c 它让你在以MBCS和UNNICODE来build程序时可以使用同样的代码 xff0c 不需要使用繁琐的宏定义来包含你的代码 TCHAR的引入 xff0c 主要是在Tch
  • Chrome解决“github.com拒绝了我们的访问请求”

    目录 1 网站查询特定IP 2 host文件修改 3 刷新DNS 如果你在Chrome访问github com时出现以下错误 xff1a 本博主之前的Chrome和Edge都无法访问github官网 xff0c 然后就来到了万能的C站找到了
  • STC12C5A60S2_LCD1602驱动

    文章目录 LCD1602 HLCD1602 cmain c LCD1602 H 代码如下 xff1a span class token macro property span class token directive hash span
  • 猿创征文|机器学习实战(8)——随机森林

    目录 1 随机森林 2 极端随机树 3 特征重要性 4 提升法 4 1 AdaBoost 4 2 梯度提升 机器学习实战 xff08 7 xff09 中我们已经提到 xff0c 随机森林是决策树的集成 xff0c 通常用bagging方法训
  • 总结2014——迷茫以及迷茫过后的坚持

    首先 xff0c 借用一句话和大家共勉 xff1a 少一些功利主义的追求 xff0c 多一些不为什么的坚持 xff01 xff01 不知不觉15年也快过了1个月了 xff0c 还是想着要为14年做一下总结 xff1a 记录一下自己的历程 今
  • 汇编总结:lea指令

    ea指令变种 按大小分类 leaw 2个字节 leal 4个字节 leaq 8个字节 lea的用法 leaq a b c d rax 首先lea指令是mov指令的变种 xff0c 据说 xff0c lea指令是x86体系结构中 xff0c
  • CMake语法—选项(option)

    CMake语法 选项 xff08 option xff09 1 选项 1 1 定义 1 2 说明 variable 选项名help text 描述 解释 备注value 选项初始化值 xff08 除ON而外全为OFF xff09 2 应用注
  • C++工程:总结 CMake 添加第三方库依赖方式git submodule、 find_library、FetchContent、CPM等

    CMake 已经成为了C 43 43 工程管理的主流方式 xff0c 功能非常强大 xff0c 现在大多数的 C 43 43 库都已经支持CMake xff0c 下面以 jsoncpp 为例 xff0c 介绍几种引入第三方库的方式 1 代码
  • 医学图像——DCMTK、VTK、ITK、RTK、SimpleITK

    1 引言 https github com SINTEFMedtek ITK VTK xff0c 相关童鞋应该很熟悉的 xff0c 而CTK是一个较新的界面库 xff0c 主要用于方便前面两个 TK的界面设计 xff0c 当然也可以作为通用
  • C++中的volatile

    volatile的本意是 易变的 volatile关键字是一种类型修饰符 xff0c 用它声明的类型变量表示可以被某些编译器未知的因素更改 xff0c 比如操作系统 硬件或者其它线程等 遇到这个关键字声明的变量 xff0c 编译器对访问该变
  • 3DTiles】关于GeometricError几何度量误差

    在 3DTiles 的官方文档中详细介绍了关于几何度量误差 Geometric Error 的一些理念和内涵 xff0c 概括来说可以翻译为如下定义 xff1a 几何度量误差 xff0c Geometric Error xff0c 简称 G
  • glPixelStorei 详解 包括像素传输

    3 glPixelStore 像glPixelStorei GL PACK ALIGNMENT 1 这样的调用 xff0c 通常会用于像素传输 PACK UNPACK 的场合 尤其是导入纹理 glTexImage2D 的时候 xff1a C
  • ESLint 简介

    ESLint简介 ESLint是一个用来识别 ECMAScript 并且按照规则给出报告的代码检测工具 xff0c 使用它可以避免低级错误和统一代码的风格 如果每次在代码提交之前都进行一次eslint代码检查 xff0c 就不会因为某个字段
  • IOS VasSonic 粗略见解

    因为项目需求需要在本地缓存html页面 xff0c 优化用户体验 了解到VasSonic 百度了下源码解析但是没有发现IOS的所以只有自己慢慢摸索了 一 类的简单关系 1 SonicEngine 引擎类 代理为 UIWebViewContr
  • axios的详细讲解

    一 axios的特性 axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端 xff0c 简单的理解就是ajax的封装 特性 xff1a 从浏览器中创建 XMLHttpRequests从 node js 创建
  • 无人机飞控算法-姿态估计-欧拉角-旋转矩阵-四元数

    无人机飞控算法 姿态估计 此系列记录了我理解的卡尔曼滤波从0到1的过程 xff0c 从姿态估计到位置估计 xff0c 我们从核心点一个个出发 xff0c 并结合实际模块的应用来一一揭开卡尔曼滤波的神秘面纱 提示 xff1a 在系列文章中 x
  • BMP格式详解

    介绍 数字图像在外存储器设备中的存储形式是图像文件 xff0c 图像必须按照某个已知的 公认的数据存储顺序和结构进行存储 xff0c 才能使不同的程序对图像文件顺利进行打开或存盘操作 xff0c 实现数据共享 图像数据在文件中的存储顺序和结