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++Builder Discussion :

Image RAW


Sujet :

C++Builder

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Image RAW
    Bonjour
    Je cherche à lire et afficher des images au format RAW.
    RAW est un format simple puisque :
    - pas d'entête
    - des pixels stockés les uns à la suite des autres
    - des pixels en niveau de gris codés sur 16bits (dans mon cas)
    Pouvez vous m'aider
    merci

  2. #2
    ubu
    ubu est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2002
    Messages : 38
    Points : 47
    Points
    47
    Par défaut
    Utilise un TFileStream.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TFileStream *Stream=new TFileStream("nom_du_fichier.raw",fmOpenRead);
    Calcule la taille de l'image (ou le nombre de pixels) et crée un buffer à la bonne taille:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unsigned __int16 *image=new unsigned __int16[Stream->Size/2];
    NB: La taille (Size) est donnée en octet, donc pour l'avoir en entier 16 bit, il faut la diviser par 2.

    Enfin, tu charge ton image dans le buffer:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Stream->Read((void *)image,Stream->Size);

  3. #3
    ubu
    ubu est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2002
    Messages : 38
    Points : 47
    Points
    47
    Par défaut
    Oups, j'ai oublié l'affichage:

    Crée un TBitmap:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Graphics::TBitmap * Bmp=new graphics::TBitmap;
    Bmp->PixelFormat=pf16bit;
    Bmp->Width= ??? // Ici tu dois connaitre à l'avance la taille de ton image, puisque tu n'a pas de header contenant ces infos
    Bmp->Height= ??? // Idem
    Ensuite tu remplis le bitmap avec le buffer:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for (int i=0;i<Bmp->Height;i++)
    {
       unsigned __int16 *BmpLine=Bmp->ScanLine[i];
       memcpy(BmpLine,&(Image[i*Bmp->Width]),Bmp->Width*2);
    }
    Enfin, pour l'affichage, puisque tu utilise BCB, tu colles un TImage sur ta Form, puis tu fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Image->Canvas->Draw(0,0,Bmp);
    Note: Je n'ai pas testé tout ce que j'ai écris, mais le principe est là.
    Par contre, une petite remarque, je n'ai jamais utilisé le format 16 bits (pf16bits) dans un bitmap. Il est fort possible qu'il s'agisse d'un format couleur.

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 4
    Points : 2
    Points
    2
    Par défaut presque tout bon
    merci pour la reponse. je suis impressionné
    lorsque je compile j'ai une erreur sur la ligne
    unsigned __int16 *BmpLine=Bmp->ScanLine[i];

    [C++Erreur] Unit1.cpp(31): Cannot convert 'void *' to 'unsigned short *'.

  5. #5
    ubu
    ubu est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2002
    Messages : 38
    Points : 47
    Points
    47
    Par défaut
    Sorry, un p'tit oubli:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unsigned __int16 *BmpLine=(unsigned __int16 *)Bmp->ScanLine[i];

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Merci
    Je te remercie sincèrement. En fait depuis hier j'avais pu corriger ta toute petite erreur.
    Donc je vois bien une image mais elle n'est pas en niveaux de gris. C'est de ma faute je n'avais pas dit que je voulais une représentation (faussée forcément) en niveaux de gris.

    Peux tu encore m'aider?

  7. #7
    ubu
    ubu est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2002
    Messages : 38
    Points : 47
    Points
    47
    Par défaut
    Pour une représentation (faussé, evidemment),je te conseille d'utiliser une image en couleur 24 ou 32 bit (Pixelformat=pf24bit ou pf32bit). Perso j'utilise 32, c'est plus facile comme ça j'utilise des entier non signés.

    Ensuite il faut une régle de trois pour remettre tes valeurs de niveaux de gis entre des bornes acceptables:
    [0...65535] => [0...255]

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    valleur_affichable=valeur_reelle*255/65535
    Ensuite tu affectes cette valeur à chaque composante R, V et B du bitmap.

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    MERCI j'y suis arrivé grace à toi

  9. #9
    Rédacteur
    Avatar de Greybird
    Inscrit en
    Juin 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 673
    Points : 1 271
    Points
    1 271
    Par défaut
    Bonjour,

    Pour la conversion en niveau de gris, il y a des posts qui traitent du sujet, indiquant notamment les coefficients à appliquer aux trois couleurs RGB pour un meilleur rendu.

    Cordialement,

    Arnaud

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Programme C++ pour convertir les images tif ou JPG en image raw
    Par kruskal21 dans le forum Traitement d'images
    Réponses: 2
    Dernier message: 29/01/2010, 22h09
  2. [Picasa] Images RAW apparaissent viollettes
    Par byloute dans le forum Imagerie
    Réponses: 3
    Dernier message: 13/11/2009, 07h22
  3. Réponses: 6
    Dernier message: 13/08/2007, 19h47
  4. Afficher une image raw
    Par lia dans le forum OpenGL
    Réponses: 4
    Dernier message: 10/08/2006, 15h47
  5. Format d'image .RAW ?
    Par shifty.net dans le forum OpenGL
    Réponses: 3
    Dernier message: 10/06/2004, 15h06

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