#include "ReadBMP.h"
BitMap::BitMap ()
{
memset(&fileHeader,0,sizeof(BITMAPFILEHEADER));
fileHeader.bfSize =sizeof(BITMAPFILEHEADER);
memset(&infoHeader,0,sizeof(BITMAPINFOHEADER));
infoHeader.biSize =sizeof(BITMAPINFOHEADER);
pColortable=NULL;
buffer=NULL;
width=0;
height=0;
biBitCount=0;
bmpName=NULL;
}
BitMap::~BitMap ()
{
if(buffer!=NULL)
{
delete buffer;
buffer=NULL;
}
if(biBitCount==8)
delete []pColortable;
if(bmpName!=NULL)
{
delete bmpName;
bmpName=NULL;
}
}
bool BitMap::ReadBMP(const char *bmpname)
{
//二进制读方式打开指定的图像文件
FILE *fp=fopen(bmpname,"rb");
if(fp==0) return 0;
//跳过位图文件头结构BITMAPFILEHEADER
//fseek(fp, sizeof(BITMAPFILEHEADER),0);
fread(&fileHeader,sizeof(BITMAPFILEHEADER),1,fp);
//定义位图信息头结构变量,读取位图信息头进内存,存放在变量head中
fread(&infoHeader, sizeof(BITMAPINFOHEADER), 1,fp);
//获取图像宽、高、每像素所占位数等信息
width = infoHeader.biWidth;
height = infoHeader.biHeight;
biBitCount = infoHeader.biBitCount;
//灰度图像有颜色表,且颜色表表项为256
if(biBitCount==8){
//申请颜色表所需要的空间,读颜色表进内存
pColortable=new RGBQUAD[256];
fread(pColortable,sizeof(RGBQUAD),256,fp);
}
int lineByte=(width*biBitCount/8+3)/4*4;
//申请位图数据所需要的空间,读位图数据进内存
buffer=new unsigned char[lineByte*infoHeader.biHeight ];
fread(buffer,1,lineByte*infoHeader.biHeight ,fp);
//关闭文件
fclose(fp);
bmpName=new unsigned char[strlen(bmpname)+1];
strcpy((char*)bmpName,bmpname);
return 1;
}
bool BitMap::SaveBMP(const char* copyName)
{
if(!buffer)
return 0;
int colortablesize=0;
if(biBitCount==8)
colortablesize=1024;
int lineByte=(width*biBitCount/8+3)/4*4;
FILE *fp=fopen(copyName,"wb");
if(fopen==NULL) return 0;
//位图文件头
fileHeader.bfType=0x4D42;
fileHeader.bfSize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+colortablesize+height*lineByte;
fileHeader.bfReserved1=0;
fileHeader.bfReserved2=0;
fileHeader.bfOffBits=54+colortablesize;
fwrite(&fileHeader,sizeof(BITMAPFILEHEADER),1,fp);
//位图信息头
infoHeader.biSize=40;
infoHeader.biWidth=width;
infoHeader.biHeight=height;
infoHeader.biPlanes=1;
infoHeader.biBitCount=biBitCount;
infoHeader.biCompression=0;
infoHeader.biSizeImage=height*lineByte;
infoHeader.biXPelsPerMeter=0;
infoHeader.biYPelsPerMeter=0;
infoHeader.biClrUsed=0;
infoHeader.biClrImportant=0;
fwrite(&infoHeader,sizeof(BITMAPINFOHEADER),1,fp);
//颜色表
if(biBitCount==8)
fwrite(pColortable,sizeof(RGBQUAD),256,fp);
//位图数据
fwrite(buffer,height*lineByte,1,fp);
fclose(fp);
return 1;
}
int BitMap::GetBiBitCount()
{
return biBitCount;
}
int BitMap::GetHeight()
{
return height;
}
unsigned char* BitMap::GetName()
{
return bmpName;
}
int BitMap::GetWidth()
{
return width;
}
int BitMap::GetLineByte()
{
return (width*biBitCount/8+3)/4*4;
}
unsigned char* BitMap::GetBuffer()
{
return buffer;
}
没有合适的资源?快使用搜索试试~ 我知道了~
读取bmp图片的类,实例化传入文件名即可
共2个文件
cpp:1个
h:1个
需积分: 9 12 下载量 184 浏览量
2010-05-24
18:51:35
上传
评论
收藏 2KB RAR 举报
温馨提示
这个文件是用来读取bmp图片的,是一个类,构造成实例后,用其成员ReadBMP传入文件名即可,然后用Get*可以得到想要的数据.
资源推荐
资源详情
资源评论
收起资源包目录
ReadBMP.rar (2个子文件)
ReadBMP.h 602B
ReadBMP.cpp 3KB
共 2 条
- 1
资源评论
chengcong0812
- 粉丝: 3
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功