Slt tt le monde!
Je rencontre un petit problème dans mon algorithme. En effet, je n'arrive pas à coder l'en-tête d'une image bitmap correctement. J'obtiens biens un .bmp mais que je n'arrive pas à visualiser.
Merci de m'indiquer ce qui cloche.
Enfin désolé je suis une grosse noob en C et je compte sur les geeks que vous êtes pour progresser.
thanks
void scatSegmentImage(HISTOGRM *hist, unsigned int imax, unsigned int jmax,
unsigned int kmax, double *echo, char *vtk, FILE* tmpf,
unsigned char* name){
unsigned char pix;
unsigned int i, j, k, l, z;
unsigned int jmax2;
unsigned int label0= 0;
unsigned int label1= 0;
char* vtkPtr;
int number= 0;
FILE* fp2d;
FILE* fp3d;
unsigned char ext2d[7], ext3d[7], mode[7];
unsigned char pixMax= 0;
char name1[255];
BITMAPFILEHEADER* bmfh;
BITMAPINFOHEADER* bmih;
RGBQUAD* rgbq;
bmfh=(BITMAPFILEHEADER*)calloc(1,sizeof(BITMAPFILEHEADER));
bmih=(BITMAPINFOHEADER*)calloc(1,sizeof(BITMAPINFOHEADER));
rgbq=(RGBQUAD*)calloc(1,sizeof(RGBQUAD));
jmax2=jmax; // pour que chaque ligne ait un nombre entier d'octet
while((jmax/8)!=floor(jmax/8))
jmax2=jmax+1;
vtkPtr= vtk;
rewind(tmpf);
strcpy(ext2d,"_2D.bmp");
strcpy(ext3d,"_3D.vtk");
strcpy(mode,"wb");
strcat(name,"_");
//Reecriture dans un fichier 3D //cette partie n'est pas à prendre en compte
for(l= 0; l<kmax;l++){
if(hist[l].minx!= 0){ //c'est un min
label0= hist[l].minx;
if(label1 != label0){
sprintf(name1,"%s%.3d",name,number++);
fp3d= scatOpenFile(name1,ext3d,mode);
for(k=label1;k<label0;k++)
for(j=0;j<jmax;j++)
for(i= 0; i<imax; i++, vtk++)
fwrite(vtk,sizeof(unsigned char),1,fp3d);
//Image 2D
fp2d= scatOpenFile(name1,ext2d,mode);
// on définit l'en tête du fichier bmp
bmfh->bfType='00';
bmfh->bfSize=imax*jmax2+58;
bmfh->bfReserved1=0;
bmfh->bfReserved2=0;
bmfh->bfOffBits=58;
fwrite(bmfh,sizeof(BITMAPFILEHEADER),1,fp2d);
bmih->biSize=40;
bmih->biWidth=jmax2;
bmih->biHeight=imax;
bmih->biPlanes=1;
bmih->biBitCount=8;
bmih->biCompression=0;
bmih->biSizeImage=imax*jmax2;
bmih->biXPelsPerMeter=0;
bmih->biYPelsPerMeter=0;
bmih->biClrUsed=0;
bmih->biClrImportant=0;
fwrite(bmih,sizeof(BITMAPINFOHEADER),1,fp2d);
rgbq->rgbBlue=0;
rgbq->rgbGreen=0;
rgbq->rgbRed=0;
rgbq->rgbReserved=0;
fwrite(rgbq,sizeof(RGBQUAD),1,fp2d);
for(i=0;i<imax;i++){
for(j=0;j<jmax;j++){
for(k= label1, pixMax= 0; k<label0; k++) {
pix= *(vtkPtr+(k*(jmax*imax)+j*imax+i));
if(pix>pixMax)
pixMax= pix;
}//for
//printf("%.30d\n",pixMax);
fwrite(&pixMax,sizeof(int),1,fp2d); // c'est ici qu'on rentre les valeurs des pixels
for(z=jmax;z<jmax2;z++) { // zero padding pour completer les octets vides en bout de ligne
pixMax=0;
fwrite(&pixMax,sizeof(unsigned char),1,fp2d);
break;
}//for
}//for
}//for
fclose(fp2d);
fclose(fp3d);
label1= label0;
}
}
}
}