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

如何用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);   
    }