用C语言储存BMP文件
时间:2008-06-05 12:58:11
来源:论坛整理 作者: 编辑:chinaitzhe
网友回复:检查文件头中的BITMAPINFOHEADER
网友回复:不要查看像素数据了,看看头结构吧。
网友回复:看看头结构。
网友回复:看头结构。
网友回复:
这是我的文件头,请问有没有问题呢?
int saveBMPhead(char *file) //写BMP文件头
{
struct BITMAPFILEHEADER filehead ={'B','M',0,0,0,0,}; //位图文件头
struct BITMAPINFOHEADER bmi={40,0,0,1,0,0,0,0,0,0,0,}; //位图信息头
RGBQUAD rgb;
FILE *fp;
int m,flag=0;
ColorNum=1 < <BitCount; //计算调色板单元数
if(BitCount <=8) m=ColorNum*4; //计算调色板数据字节数
else m=0;
ColorMap=14 bmi.biSize; //计算调色板数据存储位置
OffBits=ColorMap m; //计算像素存储位置
fp=fopen(file,"w b"); //建立图像文件
if(fp!=NULL){
flag=1;
bmi.biWidth=Width; //设置图像参数
bmi.biHeight=Height;
bmi.biBitCount=BitCount;
bmi.biXpelspermeter=Xpelspermeter;
bmi.biYpelspermeter=Ypelspermeter;
bmi.biSizeImage=BiSizeImage;
bmi.biClrUsed=ClrUsed;
bmi.biClrImportant=biClrImportant;
filehead.bfOffBits=OffBits;
filehead.bfSize=(long)BytesPerLine*Height OffBits;
fwrite(&filehead,sizeof(filehead),1,fp); //写位图文件头
fwrite(&bmi,sizeof(bmi),1,fp); //写位图信息头
rgb.rgbRed=rgbRed;
rgb.rgbGreen=rgbGreen;
rgb.rgbBlue=rgbBlue;
rgb.rgbReversed=rgbReversed;
//if(bmi.biBitCount <=8){
fclose(fp); //关闭图像文件
cout < <bmi.biClrImportant < <endl;
}
return(flag);
}
网友回复:这是我的头文件,请问有没有问题呢?
int saveBMPhead(char *file) //写BMP文件头
{
struct BITMAPFILEHEADER filehead ={'B','M',0,0,0,0,}; //位图文件头
struct BITMAPINFOHEADER bmi={40,0,0,1,0,0,0,0,0,0,0,}; //位图信息头
RGBQUAD rgb;
FILE *fp;
int m,flag=0;
ColorNum=1 < <BitCount; //计算调色板单元数
if(BitCount <=8) m=ColorNum*4; //计算调色板数据字节数
else m=0;
ColorMap=14 bmi.biSize; //计算调色板数据存储位置
OffBits=ColorMap m; //计算像素存储位置
fp=fopen(file,"w b"); //建立图像文件
if(fp!=NULL){
flag=1;
bmi.biWidth=Width; //设置图像参数
bmi.biHeight=Height;
bmi.biBitCount=BitCount;
bmi.biXpelspermeter=Xpelspermeter;
bmi.biYpelspermeter=Ypelspermeter;
bmi.biSizeImage=BiSizeImage;
bmi.biClrUsed=ClrUsed;
bmi.biClrImportant=biClrImportant;
filehead.bfOffBits=OffBits;
filehead.bfSize=(long)BytesPerLine*Height OffBits;
fwrite(&filehead,sizeof(filehead),1,fp); //写位图文件头
fwrite(&bmi,sizeof(bmi),1,fp); //写位图信息头
rgb.rgbRed=rgbRed;
rgb.rgbGreen=rgbGreen;
rgb.rgbBlue=rgbBlue;
rgb.rgbReversed=rgbReversed;
//if(bmi.biBitCount <=8){
fclose(fp); //关闭图像文件
cout < <bmi.biClrImportant < <endl;
}
return(flag);
}
网友回复:发现一个新问题,我用ps就可以顺利打开,但是用Windows自带的看图软件或者AcdSee就无法正确显示,但是用ps打开后,在另储为在电脑后,又可以显示了,这是不是与Windows的格式有关呢?
网友回复:把代码全贴出来看看。
关键字:语言,储存,BMP,文件,
上一篇:用C写的轮廓跟踪实现的代码
下一篇:下面没有链接了











文章评论
共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面