设为首页 加入收藏

TOP

图像编程学习笔记1――bmp文件结构处理与显示 (三)
2014-11-23 19:15:41 】 浏览:537
Tags:图像 编程 学习 笔记 bmp 文件 结构 处理 显示
PINFOHEADER infoHead;
fread(&infoHead,sizeof(BITMAPINFOHEADER),1,fp); //从fp中读取BITMAPINFOHEADER信息到infoHead中,同时fp的指针移动
biWidth = infoHead.biWidth;
biHeight = infoHead.biHeight;
biBitCount = infoHead.biBitCount;
lineByte = (biWidth*biBitCount/8+3)/4*4; //lineByte必须为4的倍数
//24位bmp没有颜色表,所以就直接到了实际的位图数据的起始位置
pBmpBuf = new unsigned char[lineByte * biHeight];
fread(pBmpBuf,sizeof(char),lineByte * biHeight,fp);
fclose(fp); //关闭文件
return TRUE;
}
/**
* 函数名: saveBmp
* 参 数: bmpName -- bmp文件名
* 功 能: 将bmp位图文件的相关信息,写入新创建的文件中
*/
bool saveBmp(char *bmpName)
{
FILE *fp;
if( (fp = fopen(bmpName,"wb") )== NULL) //以二进制写入方式打开
{
cout<<"打开失败!"<
return FALSE;
}
//设置BITMAPFILEHEADER参数
BITMAPFILEHEADER fileHead;
fileHead.bfType = 0x4D42;
fileHead.bfSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + lineByte * biHeight;
fileHead.bfReserved1 = 0;
fileHead.bfReserved2 = 0;
fileHead.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
fwrite(&fileHead,sizeof(BITMAPFILEHEADER),1,fp);
//设置BITMAPINFOHEADER参数
BITMAPINFOHEADER infoHead;
infoHead.biSize = 40;
infoHead.biWidth = biWidth;
infoHead.biHeight = biHeight;
infoHead.biPlanes = 1;
infoHead.biBitCount = biBitCount;
infoHead.biCompression = BI_RGB;
infoHead.biSizeImage = lineByte * biHeight;
infoHead.biXPelsPerMeter = 0;
infoHead.biYPelsPerMeter = 0;
infoHead.biClrUsed = 0;
infoHead.biClrImportant = 0;
//写入
fwrite(&infoHead,sizeof(BITMAPINFOHEADER),1,fp);
fwrite(pBmpBuf,sizeof(char),lineByte * biHeight,fp);
fclose(fp); //关闭文件
return TRUE;
}
/**
* 函数名: work
* 功 能: 处理位图信息,并将位图数据保存到ImageData文件中
*/
void work()
{
char readFileName[] = "nv.BMP"; //定义要读入的文件名
if(FALSE == readBmp(readFileName))
cout<<"readfile error!"<
//输出图像的信息
cout<<"Width = "<
if(!outfile)
{
cout<<"open error"<
return ;
}
int count = 0;
//图像数据信息是从左下角按行开始存储的
for(int i = 0; i < biHeight; i++ )
{
for(int j = 0; j < biWidth; j++ )
{
for(int k = 0; k < 3; k++ )
{
int temp = *(pBmpBuf + i * lineByte + j + k);
count++;
outfile<
if(count % 8 == 0)
{
outfile<
}
}
}
}
cout<<"总的像素数:"<
char writeBmpName[] = "nvcpy.BMP";
saveBmp(writeBmpName);
delete []pBmpBuf; //释放内存
}
int main()
{
work();
return 0;
}
/**
* 程序名: WorkBmp.cpp
* 功 能: 读取和显示24位BMP图像,并把图像数据输入到ImageData.txt中
* 24位bmp可以通过画图程序中的另存为的文件类型中可以选择
* bmp文件放到工程目录下
*/
#include
#include
#include
#include
int biWidth; //图像宽
int biHeight; //图像高
int biBitCount; //图像类型,每像素位数
//RGBQUAD *pColorTable; //颜色表指针
unsigned char *pBmpBuf; //存储图像数据
int lineByte; //图像数据每行字节数
/**
* 函数名: readBmp
* 参 数: bmpName -- bmp文件名
* 功 能: 读入bmp文件,并获取相应的信息
*/
bool readBmp(char *bmpName)
{
FILE *fp;
if( (fp = fopen(bmpName,"rb")) == NULL) //以二进制的方式打开文件
{
cout<<"The file "<
return FALSE;
首页 上一页 1 2 3 4 下一页 尾页 3/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇VC++截取输入法输入信息钩子dll实.. 下一篇VC++编译 常见错误

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目