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 :

r�cup�rer pixels images c++ builder


Sujet :

C++Builder

  1. #1
    Membre averti
    Homme Profil pro
    �tudiant
    Inscrit en
    Janvier 2011
    Messages
    19
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Janvier 2011
    Messages : 19
    Par d�faut r�cup�rer pixels images c++ builder
    Bonjour,

    je souhaite r�cup�rer les pixels de deux images (enregistr�es dans mon r�pertoire de travail) mais je ne m'en sort pas !

    Je ne r�cup�re que les pixels de couleur noir (4294967295 ou 0xFFFFFFFF en hexa) alors que l'image n'est pas noire (hormis quelques pixels)!

    Voici mon code:
    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
     
            imJpeg->LoadFromFile("image.jpg");
            imJpeg2->LoadFromFile("image0.jpg");
            Image1->Picture->Assign(NULL);
            imBmp->Assign(imJpeg) ;
            imBmp2->Assign(imJpeg2) ;
            int w= imBmp->Width;
            int h = imBmp->Height;
            int k=0, l=0;
     
            hGdiBitMap = imBmp->Handle;
            i=j=0;
     
            FIHM2->Show();
            TRect rect(0,0,w,h);
            Image1->Canvas->CopyRect(rect, imBmp->Canvas, rect);
            for (j=0; j <  Image1->Picture->Bitmap->Height; j++)
            {
     
                    for (i =0; i < Image1->Picture->Bitmap->Width; i++) {
     
                            coulPix = GetPixel(hGdiBitMap, i, j);  //RGB
                            GetBValue(coulPix);
                            Image1->Canvas->Pixels[i][j] = coulPix;
                            FIHM2->Image2->Canvas->Pixels[i][j] = coulPix2;
     
                    }
                    Image1->Refresh();
                    Sleep(10);
                    Application->ProcessMessages();
           }
    Je charge les images sur mon IHM et j'utilise le pas � pas pour v�rifier les valeurs des pixels .

    Je ne comprends pas. Devrais-je faire autrement? Quelles sont mes erreurs?

    �a fait plus d'un mois que je suis dessus et j'ai pris �norm�ment de retard pour mon projet de BTS. Si vous pouvez m'aider ou me conseiller juste un peu �a serait vraiment simpa. J'attends vos conseils ! Merci

  2. #2
    Membre chevronn� Avatar de Flo.
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    379
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations forums :
    Inscription : Mai 2002
    Messages : 379
    Par d�faut
    Salut,

    �a fait un bail que j'ai plus fait de borland mais de mon temps il me semble que je faisais un truc avec ScanLine

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    for(int i = 0; i < image->Picture->Bitmap->Height; ++i)
    {
         unsigned char * pixel = (unsigned char *)image->Picture->Bitmap->ScanLine[i];
     
         for(int j = 0; j < image->Picture->Bitmap->Width; ++j)
         {                       
              unsigned char b = *pixel++;
              unsigned char g = *pixel++;
              unsigned char r = *pixel++;
         }
    }
    Si �a peux aider ...

    Flo.

  3. #3
    Membre chevronn�

    Inscrit en
    Ao�t 2007
    Messages
    300
    D�tails du profil
    Informations forums :
    Inscription : Ao�t 2007
    Messages : 300
    Par d�faut
    Il faut effectivement utiliser ScanLine, qui est mal document� mais Flo. montre un exemple.
    Un autre probl�me possible peut venir du format de pixle de votre objet TBitmap. Le champ PixelFormat permet de d�finir sa taille:
    Bitmap->PixelFormat = pf8bit;
    D'autres tailles sont possibles, en RGB il faudra pf24bits. Utilisez le Ctrl+Click sur pf8bit pour aller � la d�finition. Chez moi �a donne:
    enum TPixelFormat { pfDevice, pf1bit, pf4bit, pf8bit, pf15bit, pf16bit, pf24bit, pf32bit, pfCustom };

  4. #4
    Membre averti
    Homme Profil pro
    �tudiant
    Inscrit en
    Janvier 2011
    Messages
    19
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Janvier 2011
    Messages : 19
    Par d�faut
    Franchement merci beaucoup de votre aide �a m'a beaucoup aid� !

    J'ai essay� ce que vous m'avez dit et j'arrive � r�cup�rer des pixels par contre j'essaie de l'afficher dans un TImage mais je n'y arrive pas.

    Est-ce que vous savez comment on met les pixels (r,v,b) dans une autre variable de type TBitmap* ?

    J'ai essay� cela mais en vain

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
     
       r = *pixelImg1++;
       v = *pixelImg1++;
       b = *pixelImg1++;
       pix[0] = r;
       pix[1] = v;
       pix[2] = b;
       imBmp2->Canvas->Pixels[i][j] = atoi(pix);
    r, v, b et pix sont des unsigned char.

    Encore merci pour votre aide !

  5. #5
    Membre chevronn� Avatar de Flo.
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    379
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations forums :
    Inscription : Mai 2002
    Messages : 379
    Par d�faut
    Salut,

    encore une fois, je ne suis pas sur de mon coup.

    Voil� ce que j'�crirais moi en supposant qu'il s"agisse d'images RGB (en niveaux de gris il faut remplacer le 3 par un 1).

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    for(int i = 0; i < imageSrc->Picture->Bitmap->Height; ++i)
    {
         unsigned char * pixelSrc = (unsigned char *)imageSrc->Picture->Bitmap->ScanLine[i];
         unsigned char * pixelDst = (unsigned char *)imageDst->Picture->Bitmap->ScanLine[i]; 
         std::copy(pixelSrc, pixelSrc + 3 * image->Picture->Bitmap->Width, pixelDst);
    }
    ou sinon de mani�re plus triviale :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    for(int i = 0; i < imageSrc->Picture->Bitmap->Height; ++i)
    {
         unsigned char * pixelSrc = (unsigned char *)imageSrc->Picture->Bitmap->ScanLine[i];
         unsigned char * pixelDst = (unsigned char *)imageDst->Picture->Bitmap->ScanLine[i]; 
     
         for(int j = 0; j < imageSrc->Picture->Bitmap->Width; ++j)
         {                       
              *pixelDst++ = *pixelSrc++; // copie du B
              *pixelDst++ = *pixelSrc++; // copie du G
              *pixelDst++ = *pixelSrc++; // copie du R
         }
    }
    Peut-�tre j'ai tout faux.

    Flo.

  6. #6
    Membre chevronn� Avatar de Flo.
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    379
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations forums :
    Inscription : Mai 2002
    Messages : 379
    Par d�faut
    En fait il faut �viter de passer par Pixels[i][j] pour acc�der � la valeur des pixels. C'est int�ressant pour acc�der aux valeurs des pixels de mani�re sporadique ; style pour r�cup�rer la valeur du pixel sous la souris. Mais pour acc�der rapidement � tous les pixels, il faut passer par le ScanLine.

    Flo.

Discussions similaires

  1. R�cup�rer pixel d'une image
    Par o-sys dans le forum Interfaces Graphiques en Java
    R�ponses: 11
    Dernier message: 29/08/2012, 15h42
  2. [Mpeg4] r�cup�rer une image d'un flux MPEG4.
    Par Drizztrobber dans le forum Multim�dia
    R�ponses: 10
    Dernier message: 19/03/2007, 10h01
  3. r�cup�rer une image du presse papier
    Par amelhog dans le forum G�n�ral JavaScript
    R�ponses: 3
    Dernier message: 09/08/2005, 10h18
  4. [Swing] r�cup�rer une image d'un composant
    Par klemouf dans le forum AWT/Swing
    R�ponses: 2
    Dernier message: 16/09/2004, 10h24
  5. R�ponses: 18
    Dernier message: 05/08/2004, 18h08

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