⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bmp.cpp

📁 一个dos版的图书管理系统。
💻 CPP
字号:
#include "stdio.h"
#include "dir.h"
#include "dos.h"
#include "graphics.h"

char *malloc();

char bmp_to_dat(char *bmp,char *dat)

{unsigned char c[8],scan_times,scan_pixs;
 unsigned char workpos;int i,j,k,n,nowpos,iw,ih;
 static int color[16]={0,4,2,6,1,5,3,7,8,12,10,14,9,13,11,15};
 unsigned char workline[640],scanline[640];
 FILE *fp,*targetfp;
 union
 {unsigned char value;
  struct
  {unsigned cl:4;
   unsigned ch:4;
  }color;
 }mycolor;

 if((fp=fopen(bmp,"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--;			
 scan_times=iw/8+1;	
 scan_pixs=scan_times*4;		

 fputc(iw%256,targetfp);	
 fputc(iw/256,targetfp);
 fputc(ih%256,targetfp);
 fputc(ih/256,targetfp);
 fseek(fp,-scan_pixs,SEEK_END);

 for(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--)		
  {for(i=0;i<scan_times;i++)	
   {workpos=0;
    for(k=0;k<4;k++)		
    {mycolor.value=scanline[i*4+k];
     c[k*2]=color[mycolor.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()
{int gd=VGA,gm=VGAHI,n;
 char *buffer,bmpfile[13],_16file[13]={0};
 FILE *fp;
 struct ffblk *ff;
 initgraph(&gd,&gm,"");
 puts("(c)2001 BY Wu Jin");
 printf("Now begin showing 16 colors BMP...\n\n");
 puts("Select 16 color BMP file to put:");
 printf("0. Exit\n1. zx.bmp\n2. mm.bmp\n3.Other bmp file(*.bmp In this directory)\n");
 while(1)
 {n=getch();
  switch(n)
  {case 0  :continue;
   case '0':exit(0);
   case '1':strcpy(bmpfile,"zx.bmp");goto OUT;
   case '2':strcpy(bmpfile,"mm.bmp");goto OUT;
   case '3':{printf("Input filename(*.bmp):");
	     gets(bmpfile);goto OUT;
	    }
  }
 }
 OUT:
 strncpy(_16file,bmpfile,strlen(bmpfile)-3);
 strcat(_16file,"dat");
 if(!bmp_to_dat(bmpfile,_16file))
 {puts("File Error!");closegraph();exit(0);}
 fp=fopen(_16file,"rb");
 findfirst(_16file,ff,FA_ARCH);
 if((buffer=malloc(ff->ff_fsize))==NULL)exit(0);
 n=0;
 while(!feof(fp))
 {buffer[n]=fgetc(fp);
  n++;
 }
 for(n=0;n<100;n++)
 {putimage(350-n,n/2,buffer,COPY_PUT);
 }
 getch();
 closegraph();
 free(buffer);
 fclose(fp);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -