读bmp图片:头文件为66字节。。。怎么用c语言来读取数据啊,网上的代码我看不懂。新手,希望能写明白些

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了读bmp图片:头文件为66字节。。。怎么用c语言来读取数据啊,网上的代码我看不懂。新手,希望能写明白些相关的知识,希望对你有一定的参考价值。

网上的程序太长且无重点,希望能将关键性语句注释。

参考技术A /* 单色BMP图形文件显示 */

#include "graphics.h"
#include<stdio.h>
#include<conio.h>
/* BMP 文件头部结构 */
struct header

unsigned int bfType;
long bfSize;
unsigned int bfReserved1;
unsigned int bfReserved2;
long bfoffBits;
;

struct tinfoheader

long biSize;
long biWidth;
long biHeight;
unsigned int biPlanes;
unsigned int biBitCount;
long biCompression;
long biSizeImage;
long biXPelsPerMeter;
long biYPelsPerMeter;
long biClrUsed;
long biClrImportant;
;
struct header HEADER;
struct tinfoheader INFO;

unsigned char dgbuff[10000];/* 黑白图形文件大小,不能超过 */

void LoadDZ()

int i,ld;
char filename[20]="1.bmp";/*假设在当前目录下1.bmp文件 */
FILE *fp;

fp=fopen(filename,"rb");
fseek(fp,0,SEEK_SET);
fseek(fp,0,SEEK_END);
ld=ftell(fp);
fclose(fp);
fp=fopen(filename,"rb");
if(fp!=NULL)

fread(&dgbuff,ld,1,fp);
fclose(fp);

fp=fopen(filename,"rt");
if(fp!=NULL)

fread(&HEADER, sizeof(struct header), 1, fp);
fread(&INFO, sizeof(struct tinfoheader), 1, fp);
fclose(fp);



void show(int x,int y,int giColor,int backColor)/* 显示位置、前景色、背景色 */

int i,j,k,l=0,num,m,x0,x1,x2;
unsigned char b,c,c1;

if(HEADER.bfType!=0x4d42 || HEADER.bfReserved1!=0 || INFO.biSizeImage==0
|| INFO.biPlanes!=1 || INFO.biBitCount!=1 || INFO.biCompression!=0)
return;

m=INFO.biWidth/32;
if((INFO.biWidth%32)!=0) m=m+1;
num=HEADER.bfoffBits;

for(l=INFO.biHeight-1; l>=0; l--)

for (i=0;i<m;i++)

x0=i<<5;
for (j=0;j<4;j++)

x1=j<<3;
c=dgbuff[num];
num++;
for (k=7;k>=0;k--)

x2=x0+x1+7-k;
if(x2>=INFO.biWidth) continue;
else

b=1<<k;
c1=c&b;
if(c1==0)

putpixel(x+x2,y+l,giColor);

else
putpixel(x+x2,y+l,backColor);







void main()

int driver,mode;

driver=VGA;mode=VGAHI;
initgraph(&driver,&mode,"");
setfillstyle(SOLID_FILL,WHITE);
bar(0,0,639,479);
LoadDZ();
show(200,200,RED,BLACK);
getch();
closegraph();
追问

如果您能每句话都写个注释,。。。我就把分给你了。谢!

以上是关于读bmp图片:头文件为66字节。。。怎么用c语言来读取数据啊,网上的代码我看不懂。新手,希望能写明白些的主要内容,如果未能解决你的问题,请参考以下文章

linux下用C语言生成一个rgb888的BMP图片,为啥生成了,打开的时候(图片浏览软件)提示头文件有错

用C语言编写程序处理图片bmp文件 1.读取图片的宽度,高度,每个像素所需的位数,水平分辨率,垂直

C++实现红外Fir谱图文件转BMP图片文件

用标准c读取某bmp文件的长宽及象素等信息需要哪些函数?

c语言里有memset()怎么用?需要啥头文件?

C语言读取1位的BMP图