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
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    4
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 4
    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 �clair�
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    38
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2002
    Messages : 38
    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 �clair�
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    38
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2002
    Messages : 38
    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
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    4
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 4
    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 �clair�
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    38
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2002
    Messages : 38
    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
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    4
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 4
    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 �clair�
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    38
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2002
    Messages : 38
    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
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    4
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 4
    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
    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