piroman14
Messages postés18Date d'inscriptionsamedi 14 juin 2008StatutMembreDernière intervention11 novembre 2008
-
23 juin 2008 à 15:58
piroman14
Messages postés18Date d'inscriptionsamedi 14 juin 2008StatutMembreDernière intervention11 novembre 2008
-
1 juil. 2008 à 10:48
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;
//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; ibfType='00';
bmfh->bfSize=imax*jmax2+58;
bmfh->bfReserved1=0;
bmfh->bfReserved2=0;
bmfh->bfOffBits=58;
for(i=0;ipixMax)
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
piroman14
Messages postés18Date d'inscriptionsamedi 14 juin 2008StatutMembreDernière intervention11 novembre 2008 1 juil. 2008 à 10:48
En bitmap je n'ai pas reussi à créer une image 8 bits en tons de gris.
J'ai contourné le problème en codant chaque pixel sur 24 bits et en donnant la même valeur aux trois couleurs R V B lors du fwrite.
BunoCS
Messages postés15472Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention25 mars 2024103 23 juin 2008 à 16:32
Salut,
Il faut mettre le type à "BM"bmfh->fType 0x4d42; // 0x42 "B" 0x4d = "M"
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
glipper
Messages postés246Date d'inscriptiondimanche 2 juin 2002StatutMembreDernière intervention11 septembre 20161 23 juin 2008 à 17:02
jmax2=jmax; // pour que chaque ligne ait un nombre entier d'octet
Je crois qu'il faut que chaque ligne comporte un nombre total d'octets qui soit multiple de 4.
Le reste doit être complété avec des zéros.
Enfin du moins moi c'est comme ça que je faisais...
glipper
Messages postés246Date d'inscriptiondimanche 2 juin 2002StatutMembreDernière intervention11 septembre 20161 23 juin 2008 à 17:13
fwrite(bmih,sizeof(BITMAPINFOHEADER),1,fp2d);
ah oui aussi il peut y avoir un problème avec le padding du compilateur peut etre aussi.
Il existe une commande pour eviter ça :
#pragma pack(push,1)
........
#pragma pack(pop)
Mais bon je suis pas sur que tu en ai besoin dans ton cas.
Si tu veux, tu peux utiliser un logiciel qui s'appelle CR-Hexact (ou un autre) qui permet d'afficher ton fichier en hexadecimal.
Tu pourras ainsi comparer ton en-tête avec celui d'un vrai fichier bitmap et voir ce qui pose problème.
Bon voilà, ça peut t'aider peut-être (ou non...)
Glipper
Vous n’avez pas trouvé la réponse que vous recherchez ?
piroman14
Messages postés18Date d'inscriptionsamedi 14 juin 2008StatutMembreDernière intervention11 novembre 2008 24 juin 2008 à 10:09
Merci tout d'abord à vos réponses. =)
Tu as raison Bruno mais j'ai tenté ça par désespoir. J'avais bien mis avant bmfh->bfType='BM'; : ce qui revient au même.
Sinon, le problème que je me pose mtnt est:
Quelles valeurs attribuer aux champs
bmih->biClrUsed=?;
bmih->biClrImportant=?;
et
rgbq->rgbBlue=?;
rgbq->rgbGreen=?;
rgbq->rgbRed=?;
rgbq->rgbReserved=?;
si l'on souhaite visualiser une image 8bits en tons de gris?