C++小程序:bmp图片解析

编译器:visual studio2019

需要在工作目录中放一张bmp格式的图片,我这里将其命名为“image.bmp”,可以任意命名

程序比较简单,输出也比较清晰,运行一下就可以了

#include
#include
#include
#include
using namespace std;

int main(void)
{
	errno_t err;
	FILE* fp;
	if (err = fopen_s(&fp, "image.bmp", "r"))
	{
		cout << "fail to open." << endl;
		exit(-1);
	}

	BITMAPFILEHEADER bmpFileHeader;
	fread(&bmpFileHeader, sizeof(BITMAPFILEHEADER), 1, fp);
	BITMAPINFOHEADER bmpInfoHeader;
	fread(&bmpInfoHeader, sizeof(BITMAPINFOHEADER), 1, fp);
	cout << setiosflags(ios::left);   //设置输出格式为左对齐
	//B,M的ASCII码的16进制形式分别为0x42,0x4d,0x4d42的值为19778,当bfType为19778时,就说明是bmp图片
	cout << setw(40) << "bfType:" << setw(20) << bmpFileHeader.bfType << endl;
	cout << setw(40) << "图片大小为:" << bmpFileHeader.bfSize << "Byte,即" << bmpFileHeader.bfSize / 1024 << "kB" << endl;
	cout << setw(40) << "文件头位置到图像数据位置的偏移量为:" << bmpFileHeader.bfOffBits << "Byte" << endl;

	cout << setw(40) << "bmp信息头大小为:" << bmpInfoHeader.biSize << "Byte" << endl;
	cout << setw(40) << "图片宽度为:" << bmpInfoHeader.biWidth << "pixel" << endl;
	cout << setw(40) << "图片高度为:" << bmpInfoHeader.biHeight << "pixel" << endl;
	cout << setw(40) << "每个像素比特数为:" << bmpInfoHeader.biBitCount << "bit,即每个像素占" << bmpInfoHeader.biBitCount / 8 << "Byte" << endl;
	switch (bmpInfoHeader.biCompression)
	{
	case 0:
		cout << setw(40) << "图像数据压缩类型为:" << "不压缩" << endl;
		break;
	case 1:
		cout << setw(40) << "图像数据压缩类型为:" << "8比特游程编码,只适用于8位位图" << endl;
		break;
	case 2:
		cout << setw(40) << "图像数据压缩类型为:" << "4比特游程编码,只适用于4位位图" << endl;
		break;
	case 3:
		cout << setw(40) << "图像数据压缩类型为:" << "比特域,用于16/32位位图" << endl;
		break;
	case 4:
		cout << setw(40) << "图像数据压缩类型为:" << "位图含JPEG图像(仅用于打印机)" << endl;
		break;
	case 5:
		cout << setw(40) << "图像数据压缩类型为:" << "位图含PNG图像(仅用于打印机)" << endl;
		break;
	}
	switch (bmpInfoHeader.biClrUsed)
	{
	case 0:
		cout << "使用了所有的颜色索引,不需要调色板" << endl;
		break;
	default:
		cout << setw(40) << "位图实际使用的彩色表中的颜色索引数:" << bmpInfoHeader.biClrUsed << endl;
		break;
	}
	switch (bmpInfoHeader.biClrImportant)
	{
	case 0:
		cout << setw(40) << "对图像显示有重要影响的颜色索引数:" << "都重要" << endl;
		break;
	default:
		cout << setw(40) << "对图像显示有重要影响的颜色索引数:" << bmpInfoHeader.biClrImportant << endl;
		break;
	}
	
	fclose(fp);

	return 0;
}

参考:

https://blog.csdn.net/heybeaman/article/details/81908118

https://blog.csdn.net/u013509299/article/details/41660935,我的代码就是参考这篇博客,做了一些改动

https://blog.csdn.net/luhu124541/article/details/82024835

你可能感兴趣的:(视频编码,C++)