资源描述:
《用C语言显示BMP图形.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、用C语言显示BMP图形#include"stdio.h"#include"dir.h"#include"dos.h"#include"graphics.h" char*malloc();/*malloc转换*/ charbmp_to_dat(char*bmp,char*dat)/*将16色BMP文件转换为可以用putimage输出的格式,bmp为原BMP文件,dat为转化文件*/{ unsignedcharc[8],scan_times,scan_pixs; unsignedcharworkpos;inti,j,k,n,nowpos,iw
2、,ih; staticintcolor[16]={0,4,2,6,1,5,3,7,8,12,10,14,9,13,11,15}; unsignedcharworkline[640],scanline[640]; FILE*fp,*targetfp; union { unsignedcharvalue; struct { unsignedcl:4; unsignedch:4; }color; }mycolor; if((fp=fopen(bm
3、p,"rb"))==NULL)return(0); targetfp=fopen(dat,"wb"); fseek(fp,18,SEEK_SET); iw=0;ih=0; fread(&iw,4,1,fp); /*读图像宽度*/ fread(&ih,4,1,fp); /*读图像高度*/ if(iw==0&&ih==0&&iw>640&&ih>480) {fclose(fp);fclose(targetfp);return(0);} iw--;ih--; /*∵putim
4、age中的长宽比实际数值少1*/ scan_times=iw/8+1; /*行处理单位数*/ scan_pixs=scan_times*4; /*行像素字节数∵1单位=4字节*/ fputc(iw%256,targetfp); /*填充信息头:长、宽部分*/ fputc(iw/256,targetfp); fputc(ih%256,targetfp); fputc(ih/256,targetfp); fseek(fp,-scan_pixs,SEEK_END); for(
5、j=0;j<=ih;j++) {nowpos=0; fread(scanline,scan_pixs,1,fp); fseek(fp,-scan_pixs*2,SEEK_CUR); for(n=3;n>=0;n--) /*解码4个位面*/ {for(i=0;i6、ycolor.color.ch]; c[k*2+1]=color[mycolor.color.cl]; } for(k=0;k<8;k++)workpos+=(c[k]>>n&1)<<(7-k); workline[nowpos]=workpos;nowpos++; }} fwrite(workline,scan_pixs,1,targetfp); } fclose(fp);fclose(targetfp); return(1);} main(){ intgd=VGA,gm=VGAHI,n; char*
7、buffer,bmpfile[13],_16file[13]={0}; FILE*fp; structffblk*ff; /*registerbgidriver(EGAVGA_driver);*/ initgraph(&gd,&gm,"C:\tc"); printf("Nowstarttodisplay16colorbmp."); puts("Pleasechoice:"); printf("0.Quit1.BMPfilename"); while(1) { n=getch();
8、 switch(n) { case0 :continue; case'0':exit(0);