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 :

chargement d'image avec c++builder


Sujet :

C++Builder

  1. #1
    Futur Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 3
    Points : 6
    Points
    6
    Par défaut chargement d'image avec c++builder
    bonjour j'ai des difficultes pour charger une image bmp et la lire pixel par pixel
    car cette etape me permet de faire une segmentation d'image satilitaire

  2. #2
    Membre éprouvé
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Points : 1 007
    Points
    1 007
    Par défaut
    Salut,
    quel est le code que tu as fait?
    Où se trouve le problème?

    Il faut utiliser la méthode Pixel du TImage:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    int   R    = (Image->Canvas->Pixels[i][j]&0xFF0000)>>16,
          G    = (Image->Canvas->Pixels[i][j]&0x00FF00)>>8,
          B    = (Image->Canvas->Pixels[i][j]&0x0000FF);
    Il existe aussi la méthode ScanLine, qui est plus rapide.

  3. #3
    Membre éclairé
    Avatar de Interruption13h
    Inscrit en
    Août 2005
    Messages
    603
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 603
    Points : 786
    Points
    786
    Par défaut
    Salut !

    Je te conceil vivement d'utiliser la méthode ScanLine qui beacoups plus rapide, et moins gourmante que la première méthode.
    Tu trouvera plein d'exemples sur ce forum; Handerson n'as pas céssé d'en contribuer...

    A+

  4. #4
    Membre chevronné
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Points : 2 189
    Points
    2 189
    Par défaut
    Citation Envoyé par bandit boy Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    int   R    = (Image->Canvas->Pixels[i][j]&0xFF0000)>>16,
          G    = (Image->Canvas->Pixels[i][j]&0x00FF00)>>8,
          B    = (Image->Canvas->Pixels[i][j]&0x0000FF);
    Salut bandit boy, si tu veux prendre les couleurs tu peux utiliser les macros GetRValue, GetGValue et GetBValue. Sans doute, quelle font exactement ce que tu fais, c'est juste plus facile à lire

  5. #5
    Membre chevronné
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Points : 1 884
    Points
    1 884
    Par défaut
    Citation Envoyé par ramzidyk Voir le message
    bonjour j'ai des difficultes pour charger une image bmp et la lire pixel par pixel
    car cette etape me permet de faire une segmentation d'image satilitaire
    Pour charger une image Bmp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Image1 -> Picture -> LoadFromFile("c:\\monimage.bmp") ;
    et pour lire un pxl :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Tu utilise soit ScanLine soit 
    Image1 -> Canvas -> Pixels[Colonne][Ligne] ; // tu aurra les valeurs en couleurs

  6. #6
    Membre éprouvé
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Points : 1 007
    Points
    1 007
    Par défaut
    Citation Envoyé par Crayon Voir le message
    Salut bandit boy, si tu veux prendre les couleurs tu peux utiliser les macros GetRValue, GetGValue et GetBValue. Sans doute, quelle font exactement ce que tu fais, c'est juste plus facile à lire
    Cool, je ne connaissais pas. Merci de l'info.

  7. #7
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 390
    Points : 1 777
    Points
    1 777
    Par défaut
    Salut !

    Une dernière fois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    class jPixel
    {
    public :
    Byte Blue;
    Byte Green;
    Byte Red;
    };
    On suppose ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    AnsiString Filename; //chemin complet du bitmap
    Graphics::TBitmap *Bitmap = new Graphics::TBitmap; //ne pas oublier de le détruire
    On aura donc ceci à faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Bitmap->LoadFromFile(Filename);
    Bitmap->PixelFormat = pf24bit; // convertir en 24 bits
    L'accès aux composantes (R,G,B) est simple et rapide :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    jPixel *Line;
    for(int y = 0; y < Bitmap->Height; y++)
        {
        Line = (jPixel*)Bitmap->ScanLine[y];
        for(int x = 0; x < Bitmap->Width; x++)
            {
    	...Line[x].Red...
            ...Line[x].Green...
            ...Line[x].Blue...
            }
        }
    =======================
    BITMAPS COULEURS 8 BITS
    =======================

    On peut convertir les bitmaps 8 bits en 24 bits, ce qui est une solution de facilité mais qui nécessite plus de ressources mémoire.
    Le traitement sur un bitmap 8 bits est par contre totalement différent puisque chaque pixel (vu par ScanLine) correspond à l'index d'une couleur dans la palette.
    Dans ce cas précis, comme il n'y a que 256 teintes possibles, il suffit de les récupérer dans un tableau.
    On y gagnera énormément, en lieu et place de Pixels[x][y] effectué sur l'intégralité du bitmap 8 bits.

    On déclare :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    PALETTEENTRY Colors[256];
    Exemple de code pour récupérer les 256 teintes de la palette d'un bitmap :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Graphics::TBitmap *Bitmap = Image1->Picture->Bitmap; //pour montrer que...
    GetPaletteEntries(Bitmap->Palette, 0, 256, Colors); // récupération des 256 couleurs
    On accèdera aux composantes RGB en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    PALETTEENTRY color;
    Byte *Line;
     
    ...
        Line = (Byte*)Bitmap->ScanLine[y]; 
        ...
            color = Colors[ Line[x] ];
            ...color.peRed 
            ...color.peGreen 
            ...color.peBlue
    Ce qui évitera de solliciter les GetR, GetG et GetBValue suite à Pixels[x][y] !

    Pour tout ce qui concerne le traitement d'images on a intérêt à aller dans le sens de la rapidité d'exécution et non dans celle de la rédaction du code !

    A plus !

  8. #8
    Membre chevronné
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Points : 1 884
    Points
    1 884
    Par défaut
    Citation Envoyé par henderson Voir le message
    Pour tout ce qui concerne le traitement d'images on a intérêt à aller dans le sens de la rapidité d'exécution et non dans celle de la rédaction du code !
    Entièrement d'accord. Dans mes applications de traitement d'image, j'utilise que le ScanLine, très souvent sur des images en niveaux de gris. C'est ++++++++++ rapide.

    @+

  9. #9
    Membre chevronné
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Points : 1 884
    Points
    1 884
    Par défaut



    Ne serais pas de lancer un sous forum c++Builder pour le traitement d'image ?

  10. #10
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 390
    Points : 1 777
    Points
    1 777
    Par défaut
    Salut !

    Il y a pas mal de choses sur le forum Algorithmes -> Traitement d'images !

    A plus !

Discussions similaires

  1. Binarisation d'image avec C++ Builder 6
    Par asma88 dans le forum OpenCV
    Réponses: 1
    Dernier message: 10/05/2011, 20h33
  2. Traitement d'image avec C++Builder
    Par Imed Soufi dans le forum C++Builder
    Réponses: 11
    Dernier message: 19/04/2008, 17h00
  3. chargement d'image avec c++
    Par ramzidyk dans le forum C++
    Réponses: 3
    Dernier message: 01/11/2007, 12h22
  4. [DOM] Chargement d'image avec progess bar
    Par seb.49 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 08/10/2007, 08h56
  5. readystate et chargement d'image avec Firefox
    Par sorenson dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 25/06/2006, 11h47

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