「数据压缩04」BMP-YUV

目录

实验目的

1.理解图像文件的基本组成。
2.掌握结构体作为复杂数据对象的用法。进一步熟悉由问题到程序的解决方案,并掌握编程细节:如内存分配、倒序读写、字节序、文件读写过程等。

实验原理

BMP文件的组成结构

BMP(全称Bitmap)是Windows操作系统中的标准图像文件格式,可以分成两类:设备相关位图(DDB)和设备无关位图(DIB)。

采用位映射存储格式,除了图像深度可选以外,在绝大多数应用中不采用其他任何压缩,因此,BMP文件所占用的空间很大。

BMP文件的图像深度可选lbit、4bit、8bit、16bit及24bit。BMP文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。

由于BMP文件格式是Windows环境中交换与图有关的数据的一种标准,因此在Windows环境中运行的图形图像软件都支持BMP图像格式。

BMP图像文件由四部分组成

(1)位图头文件数据结构,它包含BMP图像文件的类型、显示内容等信息;
(2)位图信息数据结构,它包含有BMP图像的宽、高、压缩方法,以及定义颜色等信
息;
(3)调色板,这个部分是可选的,有些位图需要调色板,有些位图,比如真彩色图(24
位的BMP)就不需要调色板;
(4)位图数据,这部分的内容根据BMP位图使用的位数不同而不同,在24位图中直接
使用RGB,而其他的小于24位的使用调色板中颜色索引值。

相应的数据结构可表示如下

位图文件头(定义BMP文件结构体)主要包括:​​​​​​​「数据压缩04」BMP-YUV

 位图信息头主要包括: 

「数据压缩04」BMP-YUV

调色板实际上是一个数组,它所包含的元素与位图所具有的颜色数相同,决定于biClrUsed和biBitCount字段。

「数据压缩04」BMP-YUV

图像数据字节阵列对于用到调色板的位图,图像数据就是该像素颜色在调色板中的索引值(逻辑色)。对于真彩色图,图像数据就是实际的R、G、B值。图像的每一扫描行由表示图像像素的连续的字节组成,每一行的字节数取决于图像的颜色数目和用像素表示的图像宽度。规定每一扫描行的字节数必须是4的整倍数,也就是DWORD对齐的。扫描行是由底向上存储的,这就是说,阵列中的第一个字节表示位图左下角的像素,而最后一个字节表示位图右上角的像素。 

字节序不同的计算机系统采用不同的字节序存储数据,同样一个4字节的32位整数,在内存中存储的方式不同。字节序分为小尾字节序(Little Endian)和大尾字节序(Big Endian)。Intel处理器大多数使用小尾字节序,Motorola处理器大多数使用大尾(Big Endian)字节序。小尾就是低位字节排放在内存的低端,高位字节排放在内存的高端,即所谓的“低位在前,高位在后”。大尾就是高位字节排放在内存的低端,低位字节排放在内存的高端,即所谓的“高位在前,低位在后”。TCP/IP各层协议将字节序定义为大尾,因此TCP/IP协议中使用的字节序通常称之为网络字节序。在实现BMP文件头信息的写入和读出时,需要注意整数保存时的字节序。例如:文件大小是以Intel序保存的。在编程前先用二进制打开方式观察BMP文件各个部分的数据存储格式。

实验思路

BMP文件需要先转为RGB,进而将RGB转为YUV写入YUV文件

实验步骤

生成四个bmp文件

「数据压缩04」BMP-YUV

进行参数的传递

「数据压缩04」BMP-YUV

main.cpp函数

分别写入和读取yuv与rgb文件

「数据压缩04」BMP-YUV

读取BMP中的RGB并将RGB写入「数据压缩04」BMP-YUV

out.cpp函数

对yuv和rgb的参数进行处理「数据压缩04」BMP-YUV

 BMP中RGB数据的读取

判断是几位的图片,如果是24位图,直接提取RGB数据即可;如果不是,则需要按照调色板来获取,判断是否需要调色板。

「数据压缩04」BMP-YUV

提取文件中的RGB数据,注意字节序,BMP的数据放到RGB中要反序 

「数据压缩04」BMP-YUV

得到RGB数据之后,我们再执行RGB-YUV 的转化 

「数据压缩04」BMP-YUV

  「数据压缩04」BMP-YUV

「数据压缩04」BMP-YUV

「数据压缩04」BMP-YUV

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
青葱年少的头像青葱年少普通用户
上一篇 2022年6月8日
下一篇 2022年6月8日

相关推荐