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 :

construction fichier BMP en langage C


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 139
    Points : 56
    Points
    56
    Par défaut construction fichier BMP en langage C
    Bonjour à tous,

    J'ai un programme qui fait de l'acquisition de "mot" (de 1600 bits chacun).
    Chaque "mot" représente en fait un pixel.

    Question:
    Il me faut ré-assembler tous ces "mots" pour constituer une image au format BMP.
    Je n'ai aucune idée de comment faire ceci.
    Qqu'un peut-il m'aiguiller ?
    Existe-t-il un algo qqe part ?

    Merçi bcp de votre aide.

  2. #2
    Membre expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Points : 3 532
    Points
    3 532
    Par défaut
    Euh... tu as au moins la spec : http://en.wikipedia.org/wiki/BMP_file_format

    Après... peut être que tu pourrais regarder les formats que Windows génère avec des images simples... tu ne respecteras peut être pas bien le standard, mais tu pourras au moins les voir sous paint...
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  3. #3
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Storing an Image montre en grande partie comment les structures BITMAPFILEHEADER et BITMAPINFOHEADER sont remplies.

    Ce qui est important est de savoir combien de bits par pixel tu as vraiment (le format BMP ne supporte pas "1600 bits par pixel") et si c'est huit ou moins, remplir la palette en plus du header.
    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.

  4. #4
    Membre actif Avatar de moins1
    Homme Profil pro
    Autre
    Inscrit en
    Février 2013
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Autre
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2013
    Messages : 85
    Points : 222
    Points
    222
    Par défaut
    Y'a des fonctions Win API qui font ce genre de traitement, m'smble. Donc MSDN.



    Note: Si t'es sous Windows.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 139
    Points : 56
    Points
    56
    Par défaut
    et non linux ;-)

  6. #6
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 374
    Points : 23 632
    Points
    23 632
    Par défaut
    Peut-on savoir quel genre d'équipement produit des pixels de 1600 bits de large ?

  7. #7
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Je que je ne comprend tu dis que chaque mot fait 1600 bit et un mot représente un pixel , sauf si j'ai loupé quelque chose mais 1600 bits = 200 octet par pixel et donc énormément de couleur représenté (200²256) alors qu'un ordi ne peut représenté que 3²256 couleur soit 3 octet par pixel (ou 24 bits).

    Comme mis plus haut il y a le format BMP , c'est pas un format compliqué grosse modo entête définit comment en lit ton ficher (genre RGB sans RLE et sans palette) la largeur,hauteur de image ect , après c'est du simple bourrinage de RVB ou RVBA (chaqu'un faisant un octet).

    Pour la palette elle ne peut représenté que 3²256 couleurs , l'autre souci la palette en général ne peut pas être très grande et n'a que 256 couleur différente , la création d'une palette n'est pas faite pour représentait une image réel.

    Donc si ton image représente réellement 200^256 couleur différente en bmp t'aura forcément des pertes et donc je me pose la question pourquoi tu as autant de couleur différentes.

    NT: il existe autre représentation que le RVB 24bits mais c'est le plus courant et le plus utilisé.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 139
    Points : 56
    Points
    56
    Par défaut
    c'est un équipement radar qui m’envoie des données météo (format arinc).
    Chaque mot fait donc 1600 bits.
    Petit rectificatif par rapport à ce que j'ai dit au tout début : je ne sais pas auj si un mot représente 1 pixel ou carrément une image.

    En tout cas de ce mot reçu (ou des ces mots reçus), je dois construire une image BMP. L'image finale doit ressembler à un demi-cercle.

    Sur ce mot de 1600 bits reçu:
    - bits 1 à 64 : en-tête : pas d'info sur les couleurs.
    - bits 65 à 1600: par paquets de 3 bits : dans ces paquets se trouvent les infos sur les couleurs. Soit 512 paquets au total.

    Si je comprends bien : je dois renseigner la palette de mon image BMP à créer avec ces 512 paquets de 3 bits chacun ? (1 pixel de la palette = 1 paquet de 3 bits ?)

    Merci de votre aide

  9. #9
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Si tu as 512 entrées, c'est forcément un bitmap sans palette (il n'y a de place que pour 256 entrées dans celle-ci).
    Il est donc probable que chaque triplet représente un pixel, comme c'est le cas dans les bitmaps 24 bits.

    As-tu au moins les dimensions de l'image quelque part?
    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.

  10. #10
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Sia,

    Puisqu'il s'agit du lien avec du matériel, tu dois avoir une doc spécifiant les caractéristiques nécessaires.

    Si tu ne l'as pas, réflexe conditionné : le site du fabricant.
    Si les cons volaient, il ferait nuit à midi.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 139
    Points : 56
    Points
    56
    Par défaut
    non pas de taille d'image communiquée. D'après le schéma donné, elle devrait faire: H 7cm, l 10cm.

    Par contre, l'image ne doit pas être uniquement dans un seul mot car 512 pixels feraient une image bcp trop petite.

    Je me pose la question si un mot ne représente pas juste une ligne d'une image.

  12. #12
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    On est pas devin , on pourra pas t'aider plus que cela , sur la page wiki il existe énormément de format ARINC .
    Comme l'a dit Droggo il est plus simple d 'avoir dans le site de fabriquant au lieu de deviner a quoi correspond quoi.
    Si il y a une doc alors c'est encore plus simple il suffit de la lire et de convertir cela en bitmap 24bits sans palette sans rle.
    Le bitmap avec palette c'est pas super courant ça peut servir seulement a la compression image mais elle n'est pas obligatoire,il faut mieux voir du cote PCX qui gère mieux la palette et la compression rle si c'est la compression qui t’intéresse.

  13. #13
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Loa,

    Si tu ne veux pas aller voir sur le site du fabricant, je pense que personne ici n'ira à ta place.

    Mais j'ai deux sites intéressants, qui devraient t'aider :

    www.merlin.enchanteur.com

    www.madame.soleil.com

    Arrête de chercher à deviner, et prends le temps de te renseigner

    chez le fabricant

    combien de fois faudra-t-il te le répéter ?

    Si tu l'avais fait, tu aurais probablement déjà la réponse.
    Si les cons volaient, il ferait nuit à midi.

  14. #14
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    Salut sauf erreur de ma part il n'y aurait pas confusion avec le nombre de points par pixel ? ( Dot Per Inch )
    Sur un moniteur de 19pouces si tu est en 1280 tu as une résolution de 72 DPI
    Donc pour un satellite qui fait de la météo la résolution est plus élevée ; tu as des scanners à plat par exemple qui ont une résolution de 2400 dpi

    si tu reçois 1600 ça signifierait une résolution de 1600 dpi ensuite tu reçois des données brutes sous la forme RGB ( 24bits )

  15. #15
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 374
    Points : 23 632
    Points
    23 632
    Par défaut
    Citation Envoyé par steph_1 Voir le message
    c'est un équipement radar qui m’envoie des données météo (format arinc). Chaque mot fait donc 1600 bits. Petit rectificatif par rapport à ce que j'ai dit au tout début : je ne sais pas auj si un mot représente 1 pixel ou carrément une image.

    Sur ce mot de 1600 bits reçu:
    - bits 1 à 64 : en-tête : pas d'info sur les couleurs.
    - bits 65 à 1600: par paquets de 3 bits : dans ces paquets se trouvent les infos sur les couleurs. Soit 512 paquets au total.

    Si je comprends bien : je dois renseigner la palette de mon image BMP à créer avec ces 512 paquets de 3 bits chacun ? (1 pixel de la palette = 1 paquet de 3 bits ?)
    La « palette » de couleurs, c'est une table de n entrées qui, pour chacune d'elles, définit une couleur précise (généralement en RGB, 12, 16, 24 ou 32 bits). Chaque pixel est ensuite uniquement codé par le numéro d'index dans cette table. C'est le genre de format que tu obtiens quand tu choisis « couleurs indexées » dans les logiciels de traitement d'image et c'était le fonctionnement le plus répandu sur les cartes graphiques jusqu'à ce que celles-ci deviennent suffisamment évoluées pour gérer des couleurs vraies en standard et à peu de frais (dans le courant des années 1990). Je ne pense pas que ça te concerne ici.

    En revanche, 1600 bits pour un seul pixel, c'est beaucoup trop, mais trois bits, c'est beaucoup trop peu ! Je pense que ton bloc de 1600 bits est une « trame » imposée par le protocole de communication. Les standards ARINC sont visiblement publiés mais, comme d'habitude avec les normes, sont hors de prix pour le particulier : https://www.arinc.com/cf/store/documentlist.cfm

    Il est possible que ta boîte dispose du document dont tu as besoin et c'est par là qu'il faudra que tu cherches. Sinon, il faudra tâtonner pour dégager un motif se répétant et, de là, retrouver le format de ton image. Il est probable qu'il s'agisse de plan de bits, c'est-à-dire que l'on envoie d'abord le bit 0 de tous les pixels depuis le début jusqu'à la fin de l'image, puis leur bit 1, puis le bit 2, etc.

    Peut-on avoir quelque part un exemplaire du genre de fichiers que tu traites ?

  16. #16
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Je me demande s'il n'y a pas confusion entre bit et byte.
    • 3 bytes pour un pixel, c'est correct (24 bits).
    • 3 bits pour un pixel, c'est très improbable car c'est très dûr à coder sans faire de gachis (contrairement à 2 ou 4 bits par pixel, qui sont des résolutions courantes d'images indexées)
    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.

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 139
    Points : 56
    Points
    56
    Par défaut
    méa culpa sur la recherche chez le fabriquant.

    Un mot arinc reçu (norme 708) représente un rayon du radar à dessiner.

    Les bits 65 à 1600: par paquets de 3 bits : il s'agit bien de bit et non de byte.

    Je dois dessiner un radar météo style "radar honeywell 660".

    Dans l'entête du mot reçu, se trouvent des infos comme tilt / range / angle.

    A partir de là, à moi de fabriquer le fichier BMP en sortie.

  18. #18
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    Au vu de quelques images radar sur google (pièces jointes) finalement 3 bits peuvent représenter 8 couleurs. Ce qui serait suffisant pour une représentant graphique.

    Peux-tu utiliser une librairie graphique quelconque pour générer ton bmp ou bien dois-tu le construire 'a la mano" ?
    Images attachées Images attachées   

  19. #19
    Membre expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Points : 3 532
    Points
    3 532
    Par défaut
    Il y a quelques libs qui existent... mais si tu tapes "libbmp" sur google, tu auras beaucoup de .c dispos pour le faire !
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  20. #20
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 374
    Points : 23 632
    Points
    23 632
    Par défaut
    Citation Envoyé par steph_1 Voir le message
    Un mot arinc reçu (norme 708) représente un rayon du radar à dessiner.

    Je dois dessiner un radar météo style "radar honeywell 660".
    D'accord ! C'est le radar Doppler du nez d'un avion ! Tu aurais pu commencer par là : on était tous restés sur le fait qu'il s'agissait d'une image satellite !

    Dans ce cas, comme le dit Gerald3D, trois bits par pixels sont plausibles : ça te ferait une échelle de 0 à 7 mais serait suffisant pour donner une indication en temps réel au pilote tout en restant compatibles avec les technologies anciennes en vigueur lorsque ces équipements ont commencé à être montés de série dans les appareils.

    Il s'agit d'une plaque comme celle-ci qui pivote mécaniquement de droite à gauche et vice-versa. Les informations d'angle dont tu disposes doivent donc correspondre à l'orientation physique de ton antenne.

    Tu ne peux donc pas « directement » convertir ton fichier en format BMP : il va donc falloir que tu retraces les pixels sur un plan selon la direction donnée et, éventuellement, que tu cumules ceux qui se chevauchent.


    Je répète ma question : est-il possible d'avoir un exemplaire du genre de fichiers que tu traites ?

Discussions similaires

  1. [VB6] Convertion d'un fichier bmp en jpg
    Par WOLO Laurent dans le forum VB 6 et antérieur
    Réponses: 22
    Dernier message: 12/01/2015, 13h22
  2. Peut-on ouvrir un fichier bmp avec la lib X11 ?
    Par caesarvanou dans le forum C
    Réponses: 7
    Dernier message: 10/02/2006, 18h32
  3. convertir un fichier bmp en jpeg (sous visual)
    Par mateo.14 dans le forum MFC
    Réponses: 2
    Dernier message: 24/03/2005, 13h22
  4. Un fichier .bmp comme paramètre d'une Procédure stockée
    Par FONKOU dans le forum Bases de données
    Réponses: 2
    Dernier message: 28/10/2004, 17h56
  5. [TP]Charger un fichier bmp
    Par flavien tetart dans le forum Turbo Pascal
    Réponses: 5
    Dernier message: 30/06/2002, 19h04

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