- 论坛徽章:
- 0
|
刚好写了一个 分享一下 顺便问个问题
struct bmptou
{
char type[2];
unsigned long size;
unsigned long baoliu;//都是0
unsigned long offset;//数据的偏移值
unsigned long bmpheadsize;//但前图片的头大小
unsigned long bmpwidth;
unsigned long bmpheigth;
short int planes;//该制总是1 位图的位面数
short int bitcount;//像素的为数
unsigned long compression;//压缩说明
unsigned long bmpdatasize;//数据大小 数据以4位对其
unsigned long hr;//用像素/米别是的水平分辨率
unsigned long vr;//垂直
unsigned long color;//位图的颜色书
unsigned long impcolor;
} objbmp;
int main()
{
FILE *bmpfp=NULL;
if((bmpfp=fopen("image.bmp","rb"))==NULL){
printf("Read the bmp file has failed\n");
exit(1);
}
//开始解析
headread(bmpfp);
pixread(bmpfp);
newbmp();
fclose(bmpfp);
return 0;
}
void headread(FILE *fpin) //read the bmp file head 1078 byte
{
int num1;
num1 = fread( objbmp.type,1,2,fpin );
printf( "%s\n",objbmp.type );
num1 = fread( &objbmp.size,sizeof( unsigned long ),1,fpin );
printf( "%lu\n",objbmp.size );
num1 = fread( &objbmp.baoliu,sizeof( unsigned long ),1,fpin );
num1 = fread( &objbmp.offset,sizeof( unsigned long ),1,fpin );
printf( "%lu\n",objbmp.offset );
num1 = fread( &objbmp.bmpheadsize,sizeof( unsigned long ),1,fpin );
printf( "%lu\n",objbmp.bmpheadsize );
num1 = fread( &objbmp.bmpwidth,sizeof( unsigned long ),1,fpin );
printf( "width %lu\n",objbmp.bmpwidth );
num1= fread( &objbmp.bmpheigth,sizeof( unsigned long ),1,fpin );
printf( "heigth %lu\n",objbmp.bmpheigth );
num1 = fread( &objbmp.planes,sizeof( short int ),1,fpin );
printf( "ceng %d\n",objbmp.planes );
num1 = fread( &objbmp.bitcount,sizeof( short int ),1,fpin );
printf( "bit count %d\n",objbmp.bitcount );
num1 = fread( &objbmp.compression,sizeof( unsigned long ),1,fpin );
printf( "ya suo lei xing %lu\n",objbmp.compression );
num1 = fread( &objbmp.bmpdatasize,sizeof( unsigned long ),1,fpin );
printf( "ya suo tuxiang size %lu\n",objbmp.bmpdatasize );
num1 = fread( &objbmp.hr,sizeof( unsigned long ),1,fpin );
printf( "shuipingxiangsu %lu\n",objbmp.hr );
num1 = fread( &objbmp.vr,sizeof( unsigned long ),1,fpin );
printf( "chuizhixiangxu %lu\n",objbmp.vr );
num1 = fread( &objbmp.color,sizeof( unsigned long ),1,fpin );
printf( "color %lu\n",objbmp.color );
num1 = fread( &objbmp.impcolor,sizeof( unsigned long ),1,fpin );
printf( "impcolor %lu\n",objbmp.impcolor );
int a=0,b=0,c=0,d=0;
while(1)
{
num1 = fread( &a,sizeof( char ),1,fpin );
num1 = fread( &b,sizeof( char ),1,fpin );
num1 = fread( &c,sizeof( char ),1,fpin );
num1 = fread( &d,sizeof( char ),1,fpin );
printf( "%d,%d,%d,%d\n",a,b,c,d );
}
} |
但是到了真正要读取数据的地方 输出就不对了 我的图片的第一个像素是纯白色 rgb 255.255.255 第4个字节对其应该为0 但是我读出来的第4个为255 我翻阅了bmp文件格式 一讲到数据段就没了。。。。谁能补充一下 不生感激 |
|