BMP格式文件像素点位置及RGB值的输出

2 篇文章 0 订阅

先贴上代码,有空再填

#include "ReadBmp.h"
#include <stdio.h>     
#include <stdlib.h>   
#include <iostream>   
using namespace std;
//变量定义   
BITMAPFILEHEADER strHead;
RGBQUAD strPla[256];//256色调色板   
BITMAPINFOHEADER strInfo;   

//显示位图文件头信息   
void showBmpHead(BITMAPFILEHEADER pBmpHead) {
	cout << "位图文件头" << endl <<endl;
	//cout<<"bfType value is "<<hex<<pBmpHead.bfType<<endl;   
	cout << "文件大小:" << pBmpHead.bfSize << endl;
	cout << "保留字_1:" << pBmpHead.bfReserved1 << endl;
	cout << "保留字_2:" << pBmpHead.bfReserved2 << endl;
	cout << "实际位图数据的偏移字节数:" << pBmpHead.bfOffBits << endl << endl;
}

void showBmpInforHead(tagBITMAPINFOHEADER pBmpInforHead) {
	cout << "位图信息头" << endl << endl;
	cout << "结构体的长度:" << pBmpInforHead.biSize << endl;
	cout << "位图宽:" << pBmpInforHead.biWidth << endl;
	cout << "位图高:" << pBmpInforHead.biHeight << endl;
	cout << "biPlanes平面数:" << pBmpInforHead.biPlanes << endl;
	cout << "biBitCount采用颜色位数:" << pBmpInforHead.biBitCount << endl;
	cout << "压缩方式:" << pBmpInforHead.biCompression << endl;
	cout << "biSizeImage实际位图数据占用的字节数:" << pBmpInforHead.biSizeImage << endl;
	cout << "X方向分辨率:" << pBmpInforHead.biXPelsPerMeter << endl;
	cout << "Y方向分辨率:" << pBmpInforHead.biYPelsPerMeter << endl;
	cout << "使用的颜色数:" << pBmpInforHead.biClrUsed << endl;
	cout << "重要颜色数:" << pBmpInforHead.biClrImportant << endl;
}

tagRGBQUAD* ReadFile(char *strFile) {
	FILE *fpi;
	int i;
	fpi = fopen(strFile, "rb");
	if (fpi != NULL) {
		//先读取文件类型   
		WORD bfType;
		fread(&bfType, 1, sizeof(WORD), fpi);
		if (0x4d42 != bfType) {
			cout << "the file is not a bmp file!" << endl;
			return NULL;
		}
		//读取bmp文件的文件头和信息头   
		fread(&strHead, 1, sizeof(tagBITMAPFILEHEADER), fpi);
		showBmpHead(strHead);//显示文件头   
		fread(&strInfo, 1, sizeof(tagBITMAPINFOHEADER), fpi);
		showBmpInforHead(strInfo);//显示文件信息头   

		//读出图片的像素数据   
		cout << endl;
		IMAGEDATA **imagedata;//存储像素信息
		imagedata = (IMAGEDATA **)malloc(sizeof(IMAGEDATA*)*strInfo.biHeight);
		for (i = 0; i < strInfo.biHeight; i++)
			*(imagedata + i) = (IMAGEDATA*)malloc(sizeof(IMAGEDATA)*strInfo.biWidth);
		//fseek(fpi,54,SEEK_SET);   
		
		for (i = 0; i < strInfo.biHeight; i++) {
			for (int j = 0; j < strInfo.biWidth; j++) {
				fread(*(imagedata + i) + j, sizeof(IMAGEDATA), 1, fpi);
			}
		}
		cout << "==================red======================" << endl;
		for (i = 0; i < strInfo.biHeight; i++) {
			for (int j = 0; j < strInfo.biWidth; j++) {
				printf("%d  ", imagedata[i][j].red);
			}
			cout << endl;
		}
		cout<<"===================green====================="<<endl;
		for( i = 0;i < strInfo.biHeight;i++) {
			for(int j = 0;j < strInfo.biWidth; j++){
				printf("%d  ", imagedata[i][j].green);
			}
			cout << endl;
		}
		cout<<"====================blue===================="<<endl;
		for(i = 0;i < strInfo.biHeight;i++) {
			for(int j = 0;j < strInfo.biWidth; j++){
				printf("%d  ", imagedata[i][j].blue);
			}
			cout << endl;
		} 
		fclose(fpi);
	}
	else {
		cout << "file open error!" << endl;
		return NULL;
	}
}
int main() {
	char strFile[30] = "E:\\exp3.bmp";
	cout << strFile << endl;
	ReadFile(strFile);
	system("pause");  //运行框闪退处理
	//return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Loganer

感谢

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值