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 :

Conversion de l'image en nuance de gris


Sujet :

C++Builder

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    89
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 89
    Par d�faut Conversion de l'image en nuance de gris
    Salut
    Je cherche � am�liorer ce programme qui fait la conversion d'une image couleur en une image en nuance de gris.
    Je demande aux experts de la programmation si ce programme est bien optimal:
    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
    void _fastcall TForm1::MakeGreyScale(TImage* image)
    {
    TColor color;
    byte r,g,b,gr;
    for (int x=0;x<Image1->Width;x++)
    for(int y=0;y<Image1->Height;y++)
      {
       color = Image1->Canvas->Pixels[x][y];
       r=GetRValue(color);
       g=GetGValue(color);
       b=GetBValue(color);
       gr = (r+g+b)div 3;
       Image1->Canvas->Pixels[x][y]=RGB(gr,gr,gr);
      }
    }
    et Merci d'avance

  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,

    Il faut utiliser ScanLine :

    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
    for(int i = 0; i < Image1->Picture->Bitmap->Height; i++)
    {
            BYTE * row = (BYTE*)Image1->Picture->Bitmap->ScanLine[i];
     
            for(int j = 0; j < Image1->Picture->Bitmap->Width; j++)
            {
                BYTE * col = (BYTE*)(row + j * 3);
                unsigned char gris = (unsigned char)((col[0] + col[1] + col[2]) / 3);
                col[0] = gris;
                col[1] = gris;
                col[2] = gris;
            }
     
    }
     
    Image1->Refresh();
    A+

    Flo.

  3. #3
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    89
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 89
    Par d�faut oui mais je n'ai pas vraiment compris
    Merci beaucoup, je l'ai essay�, c'est ultra-rapide! mais je n'ai pas tr�s bien compris. S'il te pla�t commentes ce programme.
    Merci d'avance.

  4. #4
    Membre Expert
    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
    Par d�faut
    Si tu veux des infos sur scanline va voir le site:
    http://nono40.developpez.com/tutorie...i/efg/scanline

    C'est en Delphi, mais pour ce qui du principe, c'est la m�me chose que BCB.

  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 et pardon pour l'absence de commentaires. En g�n�ral c'est pas mon style .

    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
    // on parcourt chaque ligne de l'image
    for(int i = 0; i < Image1->Picture->Bitmap->Height; i++)
    {
            // on récupère un pointeur sur la ieme ligne de pixels
            // C'est organisé comme ça : BGRBGRBGRBGRBGRBGRBGR ...
            BYTE * row = (BYTE*)Image1->Picture->Bitmap->ScanLine[i];
     
            // on parcourt chaque colonne de l'image
            for(int j = 0; j < Image1->Picture->Bitmap->Width; j++)
            {
                // on récupère un pointeur sur le jieme pixel de la ieme ligne
                // on va de 3 en 3 puisqu'on a en suivant les 3 valeurs BGR pour un pixel
                BYTE * col = (BYTE*)(row + j * 3);
     
                // on fait du gris
                unsigned char gris = (unsigned char)((col[0] + col[1] + col[2]) / 3);
     
                col[0] = gris; // on assigne à la composante bleue la valeur de gris
                col[1] = gris; // on assigne à la composante verte la valeur de 
                col[2] = gris; // on assigne à la composante rouge la valeur de 
            }
     
    }
     
    // on rafraichit l'image
    Image1->Refresh();
    A+
    Flo.

  6. #6
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    89
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 89
    Par d�faut
    oui c'est compris, merci
    seulement, �a ne marche pas pour une image jpg
    est-ce que tu connais le code du programme qui convertit les images jpg en nuance de gris?
    et encore merci

  7. #7
    Membre confirm�
    Profil pro
    Inscrit en
    Ao�t 2004
    Messages
    152
    D�tails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 152
    Par d�faut
    Si tu utilises un composant TJPEG tu peux la convertir en TBtimap pour que �a fonctionne...

  8. #8
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    89
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 89
    Par d�faut
    Merci de ton aide mais je ne sais pas comment faire pour la convertir
    Merci de bien vouloir m'expliquer

  9. #9
    Membre confirm�
    Profil pro
    Inscrit en
    Ao�t 2004
    Messages
    152
    D�tails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 152
    Par d�faut
    Tu dois proc�der ansi:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    //Création de ton TJPEG
    ...
     
    //Création du bitmap pour la nuance
    Graphics::TBitmap *bmp = new Graphics::TBitmap;
    bmp->Assign(TJpeg);
    delete TJpeg;
     
    //Nuance ...
    Ce sujet m'int�resse aussi...
    Flo tu pourrais juste me dire comment tu ferais pour prendre la couleur d'un pixel et de le copier sur un pixel d'une autre image ?

  10. #10
    Membre Expert

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 412
    Par d�faut
    Salut !

    Il me semble que le bon rapport luminance/chrominance est :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    niv_de_gris = ((R * 30) + (G * 59) + (B * 11)) / 100;
    Mais parfois on a int�r�t � utiliser d'autres contrastes :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    niv_de_gris = ((R * 25) + (G * 50) + (B * 25)) / 100;
    Le 3/3 .... pourquoi pas !

    A plus !

  11. #11
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    89
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 89
    Par d�faut
    On dirait que tu es un infographiste, tu pourrai bien me donner la d�finition de la luminance et la chrominance.
    Merci pour ton aide

  12. #12
    Membre Expert
    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
    Par d�faut
    henderson: J'ai � peu pr�s les m�mes valeurs que toi pour la conversion.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    int Gray = ( (R*77 + G*150 + B*28) / (255) );

    tlemcenvisit: Pour des d�finitions va sur le site
    http://www.granddictionnaire.com

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Conversion d'une image en mode RGB en une image en niveau de gris
    Par frisou65 dans le forum Calcul scientifique
    R�ponses: 9
    Dernier message: 15/02/2012, 17h20
  2. Conversion d'une image en niveau de gris
    Par bouki' dans le forum D�buter
    R�ponses: 2
    Dernier message: 06/10/2010, 19h39
  3. R�ponses: 0
    Dernier message: 14/04/2010, 13h40
  4. modification de nuance de gris de image
    Par Invit� dans le forum Traitement d'images
    R�ponses: 2
    Dernier message: 30/05/2008, 18h01
  5. R�ponses: 1
    Dernier message: 30/11/2005, 17h12

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