begin process at 2010 02 09 23:39:52
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

Multimédia

 > 

Problème en tête bitmap


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Problème en tête bitmap

lundi 23 juin 2008 à 15:58:10 | Problème en tête bitmap

piroman14

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;   
 

   }
    }
  }
}  
 

lundi 23 juin 2008 à 16:32:47 | Re : Problème en tête bitmap

buno

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
lundi 23 juin 2008 à 17:02:02 | Re : Problème en tête bitmap

glipper

Membre Club
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
lundi 23 juin 2008 à 17:13:12 | Re : Problème en tête bitmap

glipper

Membre Club

 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
mardi 24 juin 2008 à 10:09:21 | Re : Problème en tête bitmap

piroman14

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?

mardi 1 juillet 2008 à 10:48:58 | Re : Problème en tête bitmap

piroman14

Réponse acceptée !
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.


Cette discussion est classée dans : int, for, char, unsigned, bmih


Répondre à ce message

Sujets en rapport avec ce message

transformer un tableau 2d en image bitmap [ par gyzmo1 ] Bonjour a tous, voilà mon problème, je suis en train de mettre en place une méthode de comparaison de signature manuscrites. Cette méthode s applique Segmentation Fault....en traitement d'image [ par psysta ] Bonjour,je suis nouveau dans la programmation en C. J'ai un programme Matlab qui marche bien, et je souhaiterais l'implémenter en C. Le pgm compile bi comment afficher un pixel en VGA ? [ par LedPaL ] Slt,je programme ac dev-cpp et j'arrive pas a afficher de pixels a l'écran !!! de l'aide plz !!voici un bout de ma source:unsigned char * ecran = (uns Comment forcer le RTS pour une liaison RS232 [ par ancat ] Bonjourje viens de faire un petit prog (grandement inspire de sources du site) mais je ne saisis pas trop le controle du RTS.Celui ci est-il traite pa Pointeurs et Desallocation [ par gilimcce ] Bonjour à tous....je declare une fonctionloadJpegImage(char *, unsigned char*, int*, int*)1e parametre : le chemin de l'image chargee2e // algorithmique de fonction rec [ par fs_fck_sarko ] bonjour tout le monde, est ce que quelquun pourai maider pour le calul de complexite d'un programme qui resout les sudoku ? En fait je voudrais trouve acceder aux éléments d' un unsigned char ** [ par ththththth ] Bonjour à tous !!!J'ai un petit probleme pour acceder aux éléments d'un unsigned char**.Un pti bout de code sera plus simple...unsigned char **t = (un matrice de caractere en c [ par flofloo ] slt tout le monde voici mon probleme : char **Init_Matrice_IrcMSG(int ligne,int colone){     char **mat = NULL;     int i;     mat = c++ [ par gilles8111 ] salut,je suis débutant en c++,j'ai jusqu'ici toujours programmé en java. Mon problème est le suivant: j'ai implémenté une classe CSpieler dont le cons aide code mot anagramme [ par sahbibenayed ] bonjour;je travaille sur borland C++;je souhaite coder un programme permattant de scanner une chaine de caractere, puis afficher dans chaque ligne les


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,028 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales