读书人

怎么用C语言将jpg格式的图片转换成bmp

发布时间: 2012-03-03 15:33:03 作者: rapoo

如何用C语言将jpg格式的图片转换成bmp格式的图片?
请不要调用Turbo C 和 VC++ 提供的库函数,谢谢!!!!

[解决办法]
主要是要弄清楚bmp jpg的文件结构
代码太长,给出部分

C/C++ code
#include   <stdio.h>  #include   <malloc.h>  #include   <math.h>  #include   <stdlib.h>      #define   PI   3.1415927     #define   widthbytes(i)   ((i+31)/32*4)         int   sampleYH,sampleYV,sampleUH,sampleUV,sampleVH,sampleVV;     int   HYtoU,VYtoU,HYtoV,VYtoV,YinMCU,UinMCU,VinMCU;     int   compressnum=0,Qt[3][64],*YQt,*UQt,*VQt,codepos[4][16],codelen[4][16];     unsigned   char   compressindex[3],YDCindex,YACindex,UVDCindex,UVACindex;     unsigned   char   HufTabindex,And[9]={0,1,3,7,0xf,0x1f,0x3f,0x7f,0xff};     unsigned   int   codevalue[4][256],hufmax[4][16],hufmin[4][16];     int   bitpos=0,curbyte=0,run=0,value=0,MCUbuffer[10*64],blockbuffer[64];     int   ycoef=0,ucoef=0,vcoef=0,intervalflag=0,interval=0,restart=0;     long   Y[4*64],U[4*64],V[4*64],QtZMCUbuffer[10*64];     unsigned   long   imgwidth=0,imgheight=0,width=0,height=0,linebytes;     int   Z[8][8]={{0,1,5,6,14,15,27,28},{2,4,7,13,16,26,29,42},               {3,8,12,17,25,30,41,43},{9,11,18,24,31,40,44,53},                               {10,19,23,32,39,45,52,54},{20,22,33,38,46,51,55,60},                               {21,34,37,47,50,56,59,61},{35,36,48,49,57,58,62,63}};         struct{       unsigned   char   type[2];       long   size;       long   reserved;       long   offset;       }head;         struct{       long   size;       long   width;       long   height;       int   plane;       int   bitcount;       long   compression;       long   imagesize;       long   xpels;       long   ypels;       long   colorused;       long   colorimportant;       }bmp;       void   error(char   *s)       {         printf("%s\n",s);         exit(1);       }             void   makebmpheader(FILE   *fp)       {         int   i,j;         unsigned   long   colorbits,imagebytes;         colorbits=24;         linebytes=widthbytes(colorbits*imgwidth);         imagebytes=(unsigned   long)imgheight*linebytes;         head.type[0]='B';head.type[1]='M';         head.size=imagebytes+0x36;         head.reserved=0;         head.offset=0x36;         fwrite(&head,sizeof(head),1,fp);         bmp.size=0x28;         bmp.width=(long)imgwidth;         bmp.height=(long)imgheight;         bmp.plane=1L;         bmp.bitcount=colorbits;         bmp.compression=0;         bmp.imagesize=imagebytes;         bmp.xpels=0xece;         bmp.ypels=0xec4;         bmp.colorused=0;         bmp.colorimportant=0;         fwrite(&bmp,sizeof(bmp),1,fp);         for(j=0;j<imgheight;j++)           for(i=0;i<linebytes;i++)             fputc(0,fp);       } 

读书人网 >C++

热点推荐