使用c++实现BMP转YUV

本文详细介绍了如何通过C++将多个含有特定logo的BMP图像转换成YUV格式,包括实验目的、BMP文件结构解析、程序编写过程、实验结果展示和总结。在转换过程中,强调了函数定义、缓冲区管理和倒序读写的重要性。
摘要由CSDN通过智能技术生成

一.实验目的

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值