<<图象处理和分析>>课程实验1一、实验目的熟悉*.bmp位图文件的文件格式,掌握位图数据读取并在屏幕上显示的方法。二、实验环境1~2人一台pc机,VisualC++6.0编程环境。三、实验内容读取指定的256色灰度图像的数据,显示该文件的文件头和信息头数据的值,并在屏幕上显示该图象。四、实验步骤1.进入VisualC++6.0编程环境,点击“File”→“New”,选择project标签页,按照图1所示选择新建工程的类型和名字,点击ok确定。图12.出现图2所示对话框,按照图2进行应用程序类型选择,并点击Finish确定。在随后出现的对话框中点击ok确定,系统就按照我们的要求自动生成了一个名为“ShowBmp”的工程。3.在stdafx.h头文件中添加如下的代码:#include
//MFCcoreandstandardcomponents#include//MFCextensions#include//MFCAutomationclasses#include//MFCsupportforInternetExplorer4CommonControls#include/*For_MAX_PATHdefinition*/#include//输入输出函数库#include//内存分配函数库#include//数学相关函数库图24.打开ShowBmp.cpp文件,在主函数main之前添加如下代码:BITMAPFILEHEADERbmfHeader;//位图文件头BITMAPINFOHEADERbmiHeader;//位图信息头RGBQUAD*bmiColor;//调色板指针unsignedcharMyImage[1024][1024];//为二维图像的颜色数据分配一个二维数组5.将主函数写为如下形式:voidmain(intargc,char*argv[]){if(argc<2){printf("输入命令格式:ShowBmp.exe*.bmp\n");return;}FILE*fp;intPalette_Num;intHeight,Width,Width_4;inti,j;DWORDColor_Value;fp=fopen(argv[1],"rb");//打开*.bmp文件,获取文件指针fread(&bmfHeader,sizeof(bmfHeader),1,fp);//从文件中读位图文件头数据到bmfHeader变量fread(&bmiHeader,sizeof(bmiHeader),1,fp);//从文件中读位图信息头数据到bmiHeader变量//判断是否是DIB对象,检查头两个字节是否是"BM"if(bmfHeader.bfType!=0x4D42){printf("这不是一个位图文件\n");return;}//判断位图的颜色是否是256色if(bmiHeader.biBitCount!=8){printf("本程序只能显示256色灰度图\n");return;}Height=bmiHeader.biHeight;//从信息头中读出图像高度Width=bmiHeader.biWidth;//从信息头中读出图像宽度Width_4=(Width+3)/4*4;//取一个大于等于Width,并且最接近Width的4的整数倍的数值printf("%s图像文件的文件头数据如下\n",argv[1]);printf("bfType=BM\nbfSize=%d\nbfReserved1=%d\nbfReserved2=%d\nbfoffBits=%d\n",bmfHeader.bfSize,bmfHeader.bfReserved1,bmfHeader.bfReserved2,bmfHeader.bfOffBits);printf("%s图像文件的信息头数据如下\n",argv[1]);printf("biSize=%d\nbiWidth=%d\nbiHeight=%d\nbiPlanes=%d\nbiBitCount=%d\nbiCompress=%d\nbiSizeImage=%d\nbiXPeIsPerMeter=%d\nbiYPeIsPerMeter=%d\nbiCIrUsed=%d\nbiClrImprotant=%d\n",bmiHeader.biSize,bmiHeader.biWidth,bmiHeader.biHeight,bmiHeader.biPlanes,bmiHeader.biBitCount,bmiHeader.biCompression,bmiHeader.biSizeImage,bmiHeader.biXPelsPerMeter,bmiHeader.biYPelsPerMeter,bmiHeader.biClrUsed,bmiHeader.biClrImportant);//获取调色板的成员数目,也就是位图所用到的颜色个数if(bmiHeader.biClrUsed==0)Palette_Num=1<