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 :

Affichage d'un TBitmap en 256 niveaux de gris


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Par défaut Affichage d'un TBitmap en 256 niveaux de gris
    Bonjour à tous,

    Voilà j'ai crée dans mon programme un TBitmap, dans lequel j'écris pixel par pixel une image (qui ne viens pas d'un fichier).
    Ensuite je fais Draw sur ma form.

    Seulement mon image du début est en niveaux de gris.
    J'ai essayer de mettre PixelFormat à pf8bits.
    Mais cela ne suffit pas, cela m'affiche une image visiblement en couleur indexée 256 couleurs.

    Je n'ai pas trouvé dans la documentation de la VCL comment préciser (pour une image 256 couleurs) si elle est en niveaux de gris ou si elle est en 256 couleurs indexées.

    Peut-être faut il allouer et affecter une palette de gris dans mon_bitmap->Palette ?

    Merci d'avance.

  2. #2
    Membre Expert

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut!

    Si tu as besoin de code je peux en donner.
    Pour une solution plus simple et toute faite, il suffit d'utiliser le bitmap de cette miniature (zip) dont la palette est en niveaux de gris cohérent (ScanLine te renverra un index correspondant effectivement au niveau de gris).

    A plus !
    Fichiers attachés Fichiers attachés

  3. #3
    Membre émérite Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Par défaut
    Merci pour ton aide.

    Je tiens aussi à me remercier particulièrement car j'ai trouvée une autre solution par moi-même (qui évite de passer par un fichier de palette extérieur à mon programme). (Non non j'ai pas les chevilles ...)

    Bon j'ai eu une bonne inspiration.

    Un appel à CreatePalette + palette allouée + palette initialisée uniformément + mon_bitmap->Palette = hmapalette.

    Ca semble marcher (en tout cas je n'ai que du gris).

    Par contre je dois avoir des erreurs dans l'image que j'affiche car les quelques pixels les plus noirs sont affichés en blanc (surement une palette non uniforme quelquepart : fichier, bitmap, hpalette ?).

    Merci.

  4. #4
    Membre émérite Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Par défaut
    Bon j'ai toujours mes pixels les plus noirs qui sont mappés en blancs (surement les 22 couleurs réservées !?).

    Aprés investigation mes palettes de gris sont bien uniformes à la fois dans les fichiers, dans le bitmap et dans ma hpalette.

    Donc je me dis que cela doit surement venir d'un realize entre palette de l'image et palette système (pourtant je suis bien en 32 bits d'affichage).

    Bizarre ... Une idée pour corriger ce problème ?

  5. #5
    Membre Expert

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    A titre perso, je ne crée pas de nouvelle palette !
    Je me contente de modifier les entrées à partir d'un bitmap généré par l'éditeur d'images fourni avec BCB ! A ce stade ce bitmap contient les 256 couleurs standard VGA.
    Lorsque cette modification est faite, je sauvegarde le bitmap sous un autre nom, ce programme ne servant qu'à générer des bitmaps préparés.
    Ensuite, j'incorpore ces bitmaps dans le programme de traitement d'images.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Graphics::TBitmap *Rouge = new Graphics::TBitmap;
    Dans le constructeur de ma form, je fais par exemple, pour récupérer un dégradé de rouge :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Rouge->LoadFromFile(Filepath + "Ref.bmp");
    HPALETTE H = Rouge->Palette;
    PALETTEENTRY E;
    for(int j = 0; j<256; j++)
        {
        E.peRed = (Byte)j; //dégradé de rouge
        E.peGreen = 0;
        E.peBlue = 0;
        E.peFlags = 0;
        SetPaletteEntries(H,j,1,&E);
        }
    Rouge->SaveToFile(Filepath + "Red.bmp");
    delete Rouge;
    Pour un gris, on sait que R == G == B

    Ca fonctionne très bien (sur mon BCB3 Pro)!

    A plus !

  6. #6
    Membre émérite Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Par défaut
    Merci henderson,

    mes excuses aprés vérification rapidede mon code j'avais une bête ligne de gestion des images binaires qui trainaient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if (pixels[x][y] == 1)
        pixels[x][y] = 255;
    Pb. résolu. Merci de m'avoir accordé du temps.

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

Discussions similaires

  1. [Débutant] Affichage en niveaux de gris
    Par souki22 dans le forum Images
    Réponses: 2
    Dernier message: 14/12/2014, 15h28
  2. Affichage image en niveaux de gris
    Par SandyF dans le forum VB.NET
    Réponses: 13
    Dernier message: 16/06/2010, 16h17
  3. Réponses: 5
    Dernier message: 11/02/2007, 21h46
  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