1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158
| int creeimage(char *mybmp)
{
int i=0;
int j=0;
int taille_fich=0;
int data=0;
int larg=0;
int haut=0;
entfichier entetfich;
entimage entetimag;
mapalet palette[NMAX+1];
FILE *fdbmp; /* fd pour le fichier .bmp */
FILE *fdres; /* fd pour le fichier resultats.dat */
/* Ouverture fichier resultats.dat en lecture */
if ((fdres=fopen(MYDATA_FILE,"r"))==NULL)
{
fprintf(stderr,"Erreur d'ouverture file descriptor res\n");
}
/* Lecture du fichier resulats.dat et conversion en valeur RGB suivant palette */
/* On s'assure que l'on est au debut du fichier */
rewind(fdres);
/* On récupère les informations de resolution de l'image */
fread(&larg,sizeof(int),1,fdres);
fread(&haut,sizeof(int),1,fdres);
/* On calcule la taille du fichier en octets */
taille_fich=54+(larg*haut*PROFON)/8;
/* Definition de l'entete du fichier sur 14 octets */
entetfich.type[0]=66;
entetfich.type[1]=77;
entetfich.taille=taille_fich;
// entetfich.taille=5769858;
entetfich.reserv1=0;
entetfich.reserv2=0;
entetfich.offset=105; /* taille entetfich + entetimag + palette */
/* Definition de l'entete de l'image sur 40 octets */
entetimag.taille=40;
entetimag.largeur=800;
entetimag.hauteur=-600;
entetimag.nbreplan=1;
entetimag.prof=24;
entetimag.compress=0;
entetimag.tailleimage=1440000;
entetimag.resol_horiz=1500;
entetimag.resol_vert=1500;
entetimag.nbrcouleurs=51;
entetimag.nbrcoulimp=0;
/* Definition de la palette de couleur */
/* Elements appartenant à l'ensemble */
palette[NMAX].rg=0;
palette[NMAX].vt=0;
palette[NMAX].bl=0;
palette[NMAX].resrv=0;
/* Elements proche de l'ensemble */
for (i=1;i < ((NMAX)/2);i++)
{
palette[i].rg=127;
palette[i].vt=255;
palette[i].bl=255-(i*5);
palette[i].resrv=0;
}
/* Elements eloignes de l'ensemble */
for (i=((NMAX)/2)+1;i < NMAX-1;i++)
{
palette[i].rg=127+2;
palette[i].vt=255-(j*5);
palette[i].bl=0;
palette[i].resrv=0;
}
/* Elements n'appartenant pas à l'ensemble */
palette[0].rg=255;
palette[0].vt=255;
palette[0].bl=0;
palette[0].resrv=0;
/* Creation et ouverture du fichier en mode binaire */
if ((fdbmp=fopen(mybmp,"wb"))==NULL)
{
fprintf(stderr,"Erreur d'ouverture file descriptor bmp\n");
}
/* Ecriture de l'entete du fichier */
fwrite(&entetfich.type[0],sizeof(char),1,fdbmp);
fwrite(&entetfich.type[1],sizeof(char),1,fdbmp);
fwrite(&entetfich.taille,sizeof(int),1,fdbmp);
fwrite(&entetfich.reserv1,sizeof(short int),1,fdbmp);
fwrite(&entetfich.reserv2,sizeof(short int),1,fdbmp);
fwrite(&entetfich.offset,sizeof(int),1,fdbmp);
/* Ecriture de l'entete de l'image */
fwrite(&entetimag.taille,sizeof(int),1,fdbmp);
fwrite(&entetimag.largeur,sizeof(int),1,fdbmp);
fwrite(&entetimag.hauteur,sizeof(int),1,fdbmp);
fwrite(&entetimag.nbreplan,sizeof(short int),1,fdbmp);
fwrite(&entetimag.prof,sizeof(short int),1,fdbmp);
fwrite(&entetimag.compress,sizeof(int),1,fdbmp);
fwrite(&entetimag.tailleimage,sizeof(int),1,fdbmp);
fwrite(&entetimag.resol_horiz,sizeof(int),1,fdbmp);
fwrite(&entetimag.resol_vert,sizeof(int),1,fdbmp);
fwrite(&entetimag.nbrcouleurs,sizeof(int),1,fdbmp);
fwrite(&entetimag.nbrcoulimp,sizeof(int),1,fdbmp);
/* Ecriture de la palette de couleur */
for (i=0;i<NMAX;i++)
{
fwrite(&palette[i],sizeof(int),1,fdbmp);
}
/* On recupere une a une les donnees du fichier resultat pour chaque ligne */
i=0;
while(!feof(fdres))
{
i++;
for (j=0;j<larg;j++)
{
fread(&data,sizeof(int),1,fdres);
/* Ecriture des valeurs en RGB pour chaque points */
fwrite(&palette[data].rg,sizeof(int),1,fdbmp);
fwrite(&palette[data].vt,sizeof(int),1,fdbmp);
fwrite(&palette[data].bl,sizeof(int),1,fdbmp);
fprintf(stderr,"j %d data %d ",j,data);
}
fprintf(stderr,"iteration %d\n",i);
}
/* Fermeture du fichier */
fclose(fdbmp);
return 0;
} |
Partager