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 :

bitmap en niveaux de gris


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2002
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 63
    Par défaut bitmap en niveaux de gris
    bonjour,

    est-il possible de gérer des bitmaps en niveau de gris?
    le Tcolor peut il convertir une couleur RVB en niveaux de gris?

    par avance merci

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Par défaut
    Le code suivant effectue une conversion d'un bitmap 24 bits en niveau de gris, en conservant la couleur de transparence:

    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
            RGBTRIPLE *pixels;
     
            if (Bitmap->PixelFormat != pf24bit) return;
     
                    // convertit l'image en gris (voir Wikipedia) */        
            TColor tcol = Bitmap->TransparentColor;
     
            for (int y=0;y<Bitmap->Height;y++)
            {
                    pixels = (RGBTRIPLE *) Bitmap->ScanLine[y];
                    for (int x=0;x<Bitmap->Width;x++)
                    {
                            int couleur;
     
                            couleur = (pixels[x].rgbtBlue)*0x10000 +
                                      (pixels[x].rgbtGreen)*0x100+
                                      (pixels[x].rgbtRed);
                            if (couleur != (int) tcol)
                            {
                                    double newcouleur = 0.2125*pixels[x].rgbtRed+
                                            0.7154*pixels[x].rgbtGreen+
                                            0.0721*pixels[x].rgbtBlue;
                                    pixels[x].rgbtBlue = (BYTE) newcouleur;
                                    pixels[x].rgbtGreen = (BYTE) newcouleur;
                                    pixels[x].rgbtRed = (BYTE) newcouleur;
                            }
                    }
            }
    Sur wikipedia, tu trouves d'autres formules qui donnent un rendu différent

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2002
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 63
    Par défaut
    merci pour ta réponse

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Par défaut
    De rien. Tu peux essayer de faire varier les coefficients (ici 0.2125, 0.7154 et 0.0721) pour adapter le rendu à tes besoins.

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

Discussions similaires

  1. Histogramme d'une image BMP en niveaux de gris?
    Par bahiatoon dans le forum C++Builder
    Réponses: 13
    Dernier message: 19/11/2008, 16h36
  2. Bitmap en niveau de Gris / Dll -> HBitMap
    Par thonydesbois dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 20/07/2006, 15h34
  3. [Image] Création d'une image Niveaux de Gris 16 bits
    Par Panthère Bleue dans le forum Calcul scientifique
    Réponses: 9
    Dernier message: 13/07/2006, 19h41
  4. recuperer le niveaux de gris d'un pixel en C++
    Par jiraya43 dans le forum MFC
    Réponses: 11
    Dernier message: 24/04/2006, 16h55
  5. Réponses: 4
    Dernier message: 05/01/2006, 20h29

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