IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Probleme avec la recupération des données d'un Bitmap


Sujet :

C

  1. #1
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut Probleme avec la recupération des données d'un Bitmap
    Salut ,


    je cherche a récupérer les pixels d'un fichier bitmap 24 bits ! j'arrive sans probleme avec une image 8 bits mais je n'arrive pas a les obtenir en 24 bits!

    Deja je ne sais pas comment sont "rangés" les pixels dans un bitmap 24 bits! est ce que l'on a pour chaque pixels le code R,G, et B a la suite ou bien est ce que on a toutes les données R puis toutes les G puis les B! enfin BGR puisque que dans le bitmap elles sont inversées si j'ai bien compris

    je sais pas si j'ai été clair en tout cas mon code va peut etre vous eclairer! avec ce code j'arrive a recuperer des données mais elles sont incoherentes avec l'image




    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    	bitmap *bmp;		// variable renvoyée par la fonction
    	FILE * fichier;		// un pointeur sur FILE
    	bmp=(bitmap*)malloc(sizeof(bitmap)); // on alloue dynamiquement le pointeur sur bitmap
    	fichier = fopen ("Frame-00001.bmp","r");     // on ouvre le fichier en lecture seule
     
    	fread (bmp->sign,2,1,fichier);	// on récupère la signature
    	fread (&temp,4,1,fichier);	// puis la taille de l'image	
    	bmp->taille = conv (temp,4);   // que l'on converti en décimal 
    	fread (&temp,4,1,fichier);	// la zone réservée	
    	fread (&temp,4,1,fichier);	// l'offset	
    	bmp->offset = conv (temp,4);	// que l'on converti aussi 
    	fread (&temp,4,1,fichier);	// taille de la zone info	
    	bmp->info = conv (temp,4);
    	fread (&temp,4,1,fichier);	// la largeur de l'image	
    	bmp->largeur = conv(temp,4);
    	fread (&temp,4,1,fichier);	// la hauteur de l'image	
    	bmp->longueur = conv(temp,4);
    	fread (&temp,2,1,fichier);	// le nombre d'info	
    	bmp->nbplan = conv (temp,2);   
    	fread (&temp,2,1,fichier);	// le mode d'affichage	
    	bmp->bppixel = conv (temp,2);  
    	fread (&temp,4,1,fichier);	// le format de compression	
    	bmp->comp = conv (temp,4);     
    	fread (&temp,4,1,fichier);	// la taille de l'image	
    	bmp->tim = conv (temp,4);
    	fread (&temp,4,1,fichier);	// les résolutions horizontale
    	bmp->Hres = conv (temp,4);	// et verticale
    	fread (&temp,4,1,fichier);		
    	bmp->Vres = conv (temp,4);
    	fread (&temp,4,1,fichier);		
    	bmp->nbco = conv (temp,4);	// nbre de couleurs utilisées
    	fread (&temp,4,1,fichier);		
    	bmp->impco = conv (temp,4);	// nbre de couleurs importantes
    	fclose (fichier);		// on ferme le fichier
    	fichier = fopen ("Frame-00001.bmp","r");
     
     
    	bmp->pixel=(unsigned char*)malloc(bmp->taille);
     
    	fread(bmp->pixel,1,bmp->taille,fichier);
     
    	Largeur = bmp->largeur ;
    	Longueur = bmp->longueur;
    	IMAGE = malloc((bmp->largeur * bmp->longueur) * sizeof (int));	
            R = malloc((bmp->largeur * bmp->longueur) * sizeof (int));
    	G = malloc((bmp->largeur * bmp->longueur) * sizeof (int));
    	B = malloc((bmp->largeur * bmp->longueur) * sizeof (int));
    	//si le nbre de pixel d'une ligne n'est pas un multiple de 4 on ajoute des bits a 0
     
    	bourrage =  bmp->largeur % 4;
     
    	for(j=bmp->offset;j< ((bmp->taille - bourrage)-2);j=j+3) // soustraie bourrage à la taille 
    	{
     
    		if (flag == bmp->largeur)
    		{
    			flag=0;			   //flag permet de détecter une fin de ligne
    			j=j+bourrage;
    		}
    		if(index < (Largeur*Longueur) )
    		{
    			R[index] = bmp->pixel[j];
    		}
    		if(( index < (2*Largeur*Longueur) ) && (index >= (Largeur*Longueur) ) )
    		{
    			G[index] = bmp->pixel[j];
    		}
    		if(( index < (3*Largeur*Longueur) ) && (index >= (2*Largeur*Longueur) ) )
    		{
    			B[index] = bmp->pixel[j];
    		}
     
    		flag++;
     
     
    		index++;
    	}
     
    	for (i=0;i<(Largeur*Longueur);i++)
    	{
    		IMAGE[i] = 0.3*R[i] + 0.59*G[i] + 0.11*B[i];
    	}

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Si l'image est bien en 24bits et non en 32, normalement les données sont bien sur trois octets à la suite pour chaque pixel.

    Mais j'ai vu au moins une partie de l'erreur : Après avoir lu le header du fichier, tu le refermes et tu recommences à le relire depuis le début...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Points : 3 065
    Points
    3 065
    Hiko-seijuro

    n'cha - hoyoyo gang

    espace perso : http://hiko-seijuro.developpez.com
    dernier tuto : Introduction à l'éditeur de texte Emacs sous linux
    consulter les faqs : http://www.developpez.com/faq
    PAS DE QUESTIONS TECHNIQUES PAR MP OU MAIL

  4. #4
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Déjà cette partie du code devrait plutôt être comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    		if(index < (Largeur*Longueur) )
    		{
    			R[index] = bmp->pixel[j];
    		}
    		if(( index < (2*Largeur*Longueur) ) && (index >= (Largeur*Longueur) ) )
    		{
    			G[index] = bmp->pixel[j+1];
    		}
    		if(( index < (3*Largeur*Longueur) ) && (index >= (2*Largeur*Longueur) ) )
    		{
    			B[index] = bmp->pixel[j+2];
    		}
    		
    		flag++;
    		
    
    		index++;
    	}
    Ensuite, il faudrait regarder le format car souvent en BMP c'est rangé en BGR et non RGB.

    Jc

  5. #5
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    Merci pour vos reponses! j'ai enlever la fermeture et reouverture qui trainait ! ca ne fonctionne toujours pas cependant!et mon image en fait a un profondeur de couleur de 16 bits

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Eh bien, 16bits, c'est assez compliqué.
    Jette un coup d'oeil à l'aide de la structure BITMAPINFOHEADER...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    ouais c'est clair que j'ai du mal a saisir comment faire pour du 16 bits! si par hasard qq'un a un algo ou mieux une source pour transformer du 16 bits en 8 bits je suis preneur, parce que pour du 24bits->8bits ca se trouve mais je galere a trouver des infos sur le 16 bits!

    ou sinon encore mieux(mais la ca m'etonnerais! ) si qq'un connait avifile, je l'utilise pour créer mes bitmaps mais je n'arrive pas a extraite les frames de ma video en bitmap autres que 16 bits!

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

  8. #8
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Tu auras plus de chance en 16->24 qu'en 16->8...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  9. #9
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    ok !mais c'est quand meme etrange qu'il n'y est pas plus de source que ca pour transformer un bitmap 16 bits en niveau de gris ,non?

    en tout cas merci pour ton aide et je vais chercher du coté du 16bits->24bits alors

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

Discussions similaires

  1. Réponses: 3
    Dernier message: 17/09/2012, 23h04
  2. Réponses: 1
    Dernier message: 24/10/2011, 09h02
  3. probleme avec l'enregistrement des donnée
    Par kroma23 dans le forum Bases de données
    Réponses: 3
    Dernier message: 17/08/2011, 17h13
  4. Probleme avec l'acquisition des données dans un port dans le serveur
    Par soufian2290 dans le forum Serveurs (Apache, IIS,...)
    Réponses: 12
    Dernier message: 04/11/2007, 12h48
  5. probleme avec la conversion des données
    Par tchimou dans le forum Bases de données
    Réponses: 5
    Dernier message: 12/06/2007, 12h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo