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

该博客介绍使用visual studio2019编译器,需在工作目录放置一张bmp格式图片,可任意命名。程序简单,运行输出清晰。还给出了参考博客链接,代码是参考其中一篇并做了改动。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

编译器:visual studio2019

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

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

#include<iostream>
#include<stdlib.h>
#include<Windows.h>
#include<iomanip>
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.youkuaiyun.com/heybeaman/article/details/81908118

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

https://blog.youkuaiyun.com/luhu124541/article/details/82024835

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值