一.实验目的
1.在图像处理软件中自行生成多个BMP文件,至少含5个不同的场景画面,要求带含有班级、学号后四位和本人姓名(缩写或昵称均可)的logo。
2.编写将第一步所生成的多个BMP文件转化为YUV文件,要求可在命令行中设置每个画面出现的帧数。最后形成的YUV文件应至少包含200帧。重点掌握函数定义、缓冲区分配、倒序读写、结构体的操作。
3.对整个程序进行调试,并将生成的YUV文件用YUVviewerPlus观看,验证是否正确。
二.相关知识
典型BMP图像文件组成的四部分:
(1)位图头文件数据结构,它包含 BMP 图像文件的类型、显示内容等信息。
(2)位图信息数据结构,它包含有 BMP 图像的宽、高、压缩方法,以及定义颜色等信息。
(3)调色板,这个部分具有可选择性,有些位图需要调色板,有些位图,比如真彩色图(24位的 BMP)就不需要调色板。
(4)位图数据,这部分的内容根据 BMP 位图使用的位数不同而不同,在 24 位图中直接使用 RGB,而其他的小于 24 位的使用调色板中颜色索引值。
BMP 文件的图像深度可选 lbit、4bit、8bit、16bit 及 24bit。BMP 文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。由于 BMP 文件格式是 Windows 环境中交换与图有关的数据的一种标准,因此在 Windows 环境中运行的图形图像软件都支持 BMP 图像格式。
三.编写程序
路径写入
实验代码
main.cpp
#include <Windows.h>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include "bmp2yuv.h"
using namespace std;
int main(int argc, char** argv)
{
BITMAPFILEHEADER File_header;
BITMAPINFOHEADER Info_header;
char* yuvFileName = NULL;
char* bmpFileName = NULL;
int zhen ;
zhen = atoi(argv[7]);
bool flip = false;
FILE* bmpFile = NULL;
FILE* yuvFile = NULL;
yuvFileName = argv[6];
yuvFile = fopen(yuvFileName, "wb");
unsigned char* rgbBuf, * yBuf, * uBuf, * vBuf;
unsigned char* bmpbuf;
for (int i = 1; i < 6; i++)
{
bmpFileName = argv[i];
bmpFile = fopen(bmpFileName, "rb");
//读取位图文件头
if (fread(&File_header, sizeof(BITMAPFILEHEADER), 1