/* Funcio de conversio arxiu char format raw a Windows BMP */


#include <malloc.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

raw2bmp(char *matriuraw,long fil,long col,char *nombmp)
     {
           long i,j;
           FILE *arxiu;
  		
  /******  Header que carateritza un bmp  **********/
                          
           char id0;        
           char id1;
	   long filesize;
           short res0;
	   short res1;
           long headersize=1078;
           long infosize;
           long nfil;
           long ncol;
           short bitplanes;
           short bits;
           long bicompres;
           long bisizeimage;
           long bix;
           long biy;
           long biclr;
           long biclrimp;
           unsigned char paleta[768];

 
	
	
	
	
   if ((arxiu= fopen(nombmp,"wb")) == NULL) {
      printf("ERROR D'OBERTURA\n");
      exit(1);
   };
	
   for(i=0;i<256;i++)  {
       for(j=0;j<=2;j++) {
	   paleta[3*i+j]=i; 
       }
    }

   /******** escrivint el header **************/
	
   id0='B';         
   id1='M';
   filesize=headersize+fil*col;
   res0=0;
   res1=0;
/* headersize=1078;  */
   infosize=0x28;
   nfil=col;
   ncol=fil;
   bitplanes=1;
   bits=8;
   bicompres=0;
   bisizeimage=0;
   bix=0;
   biy=0;
   biclr=0;
   biclrimp=0;
	
   /****** escrivim el header *********/    
   fputc(id0,arxiu);
   fputc(id1,arxiu);
   fwrite(&filesize,sizeof(long),1,arxiu);
   fwrite(&res0,sizeof(short),1,arxiu);
   fwrite(&res1,sizeof(short),1,arxiu);	
   fwrite(&headersize,sizeof(long),1,arxiu);
   fwrite(&infosize,sizeof(long),1,arxiu);
   fwrite(&nfil,sizeof(long),1,arxiu);
   fwrite(&ncol,sizeof(long),1,arxiu);
   fwrite(&bitplanes,sizeof(short),1,arxiu);
   fwrite(&bits,sizeof(short),1,arxiu);	
   fwrite(&bicompres,sizeof(long),1,arxiu);
   fwrite(&bisizeimage,sizeof(long),1,arxiu);	
   fwrite(&bix,sizeof(long),1,arxiu);
   fwrite(&biy,sizeof(long),1,arxiu);
   fwrite(&biclr,sizeof(long),1,arxiu);
   fwrite(&biclrimp,sizeof(long),1,arxiu);	
	
   /****** escrivim la paleta *********/

   for(i=0;i<256;++i){
      fputc(paleta[i*3+2],arxiu);fputc(paleta[i*3+1],arxiu);
      fputc(paleta[i*3+0],arxiu);fputc(0,arxiu);
   }


   /******* escrivim el bitmap *********/

   for(i=fil-1;i>=0;i--){
      for(j=0;j<col;j++)
      	fputc (matriuraw[(col*i)+j],arxiu);       
   }
   
   fclose(arxiu);

}

