资源简介
本程序用C语言编写,读取一个BMP文件,对数字图像入门的同学来说,具有很好的参考价值,程序运行能通过,里面备好了Lena.bmp图像,值得一看~~~
代码片段和文件信息
//author:zheng jianbin
//ReadBitMap
//
#include
#include
#include
#include
#include
#include
#define WIDTHBYTES(bits) (((bits)+31)/32*4)
typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef unsigned long DWORD;
typedef long LONG;
typedef struct tagBITMAPFILEHEADER {
DWORD bfSize; //文件大小
WORD bfReserved1; //保留字,不考虑
WORD bfReserved2; //保留字,同上
DWORD bfOffBits; //实际位图数据的偏移字节数,即前三个部分长度之和
} BITMAPFILEHEADER;
//信息头BITMAPINFOHEADER,也是一个结构,其定义如下:
typedef struct tagBITMAPINFOHEADER{
//public:
DWORD biSize; //指定此结构体的长度,为40
LONG biWidth; //位图宽
LONG biHeight; //位图高
WORD biPlanes; //平面数,为1
WORD biBitCount; //采用颜色位数,可以是1,2,4,8,16,24,新的可以是32
DWORD biCompression; //压缩方式,可以是0,1,2,其中0表示不压缩
DWORD biSizeImage; //实际位图数据占用的字节数
LONG biXPelsPerMeter; //X方向分辨率
LONG biYPelsPerMeter; //Y方向分辨率
DWORD biClrUsed; //使用的颜色数,如果为0,则表示默认值(2^颜色位数)
DWORD biClrImportant; //重要颜色数,如果为0,则表示所有颜色都是重要的
} BITMAPINFOHEADER;
//调色板Palette,当然,这里是对那些需要调色板的位图文件而言的。24位和32位是不需要调色板的。
//(似乎是调色板结构体个数等于使用的颜色数。)
typedef struct tagRGBQUAD {
//public:
BYTE rgbBlue; //该颜色的蓝色分量
BYTE rgbGreen; //该颜色的绿色分量
BYTE rgbRed; //该颜色的红色分量
BYTE rgbReserved; //保留值
} RGBQUAD;
void showBmpHead(BITMAPFILEHEADER* pBmpHead)
{
printf(“位图文件头:\n“);
printf(“文件大小:%d\n“pBmpHead->bfSize);
printf(“保留字:%d\n“pBmpHead->bfReserved1);
printf(“保留字:%d\n“pBmpHead->bfReserved2);
printf(“实际位图数据的偏移字节数:%d\n“pBmpHead->bfOffBits);
}
void showBmpInforHead(tagBITMAPINFOHEADER *pBmpInforHead)
{
printf(“位图信息头:\n“);
printf(“结构体的长度:%d\n“pBmpInforHead->biSize);
printf(“位图宽:%d\n“pBmpInforHead->biWidth);
printf(“位图高:%d\n“pBmpInforHead->biHeight);
printf(“biPlanes平面数:%d\n“pBmpInforHead->biPlanes);
printf(“biBitCount采用颜色位数:%d\n“pBmpInforHead->biBitCount);
printf(“压缩方式:%d\n“pBmpInforHead->biCompression);
printf(“biSizeImage实际位图数据占用的字节数:%d\n“pBmpInforHead->biSizeImage);
printf(“X方向分辨率:%d\n“pBmpInforHead->biXPelsPerMeter);
printf(“Y方向分辨率:%d\n“pBmpInforHead->biYPelsPerMeter);
printf(“使用的颜色数:%d\n“pBmpInforHead->biClrUsed);
printf(“重要颜色数:%d\n“pBmpInforHead->biClrImportant);
}
void showRgbQuan(tagRGBQUAD* pRGB)
{
printf(“(%-3d%-3d%-3d) “pRGB->rgbRedpRGB->rgbGreenpRGB->rgbBlue);
}
void main()
{
BITMAPFILEHEADER bitHead;
BITMAPINFOHEADER bitInfoHead;
FILE* pfile;
char strFile[50];
printf(“please input the .bmp file name:\n“);
scanf(“%s“strFile);
pfile = fopen(strFile“rb“);//打开文件
if(pfile!=NULL)
{
printf(“file bkwood.bmp open success.\n“);
//读取位图文件头信息
WORD fileType;
fread(&fileType1sizeof(WORD)pfile);
if(fileType != 0x4d42)
{
printf(“file is not .bmp file!“);
return;
}
//fseek(pfile2SEEK_CUR); // “BM“
fread(&bitH
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 66616 2000-07-25 12:00 读取BMP文件\lena.bmp
文件 233538 2010-08-10 21:59 读取BMP文件\read_bmp\Debug\read_bmp.exe
文件 236920 2010-08-10 21:59 读取BMP文件\read_bmp\Debug\read_bmp.ilk
文件 17419 2010-08-10 21:59 读取BMP文件\read_bmp\Debug\read_bmp.obj
文件 231328 2010-08-10 21:39 读取BMP文件\read_bmp\Debug\read_bmp.pch
文件 517120 2010-08-10 21:39 读取BMP文件\read_bmp\Debug\read_bmp.pdb
文件 41984 2010-08-10 22:02 读取BMP文件\read_bmp\Debug\vc60.idb
文件 53248 2010-08-10 21:39 读取BMP文件\read_bmp\Debug\vc60.pdb
文件 66616 2000-07-25 12:00 读取BMP文件\read_bmp\lena.bmp
文件 4309 2010-08-10 22:08 读取BMP文件\read_bmp\read_bmp.dsp
文件 541 2010-08-10 21:30 读取BMP文件\read_bmp\read_bmp.dsw
文件 33792 2010-08-10 22:08 读取BMP文件\read_bmp\read_bmp.ncb
文件 48640 2010-08-10 22:08 读取BMP文件\read_bmp\read_bmp.opt
文件 900 2010-08-10 21:59 读取BMP文件\read_bmp\read_bmp.plg
文件 9667 2010-08-10 21:39 读取BMP文件\read_bmp.cpp
目录 0 2010-08-10 21:39 读取BMP文件\read_bmp\Debug
目录 0 2010-08-10 22:08 读取BMP文件\read_bmp
目录 0 2010-08-10 21:59 读取BMP文件
----------- --------- ---------- ----- ----
1562638 18
相关资源
- 使用DirectX3D、传统方法绘制的绕Y轴不
- C语言编写的简单U盘病毒
- VC++网络考试系统,服务器+用户端+数
- C++api大全
- C C++ Linux多线程文件程序
- C语言程序设计大赛题目和答案
- de Casteljau算法绘制Bezier曲线
- [c++中文化编程]之ComboBox组合框的类封
- 达内科技+c+++课件+及+源码+笔记
- C++ 源代码 学生考勤管理系统
- 模拟战争游戏
- 编译原理实验之四元式的生成源代码
- 基于C++的学生管理系统
- C++命令行实现的学生社团管理系统
- VC++和OpenGL实现八叉树分割
- C++宾馆管理系统
- 利用opencv做的垃圾检测代码
- C++经典算法100例
- C语言编写的前方交会代码
- SVR算法C++实现
- c语言课程设计 工资管理系统
- Frankot and Chellappa算法
- 实现对任意格式文件压缩 C++
- C++实现对文本(单纯文字,不是文本
- accelerated c++ 课后习题答案:原书作者提
- 字形轮廓提取显示C#源码
- 校级运动会 管理系统 c语言代码
- c++builder获取Cpu序列号代码
- C语言FFT
- 《C++面试宝典2015版》
评论
共有 条评论