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 :

pb couleur avec Scanline


Sujet :

C++Builder

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 57
    Points : 41
    Points
    41
    Par défaut [résolu] pb couleur avec Scanline
    en utilisant se code sur un bitmap de couleur rouge uni.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for (int y=0;y<ymax;y+=4)
    {line=(Byte *)Image2->Picture->Bitmap->ScanLine[y];
    for (int x=0;x<xmax;x+=4)
    {couleur=IntToHex(StrToInt(line[x]),8);
    Label2->Caption=Form1->Label2->Caption+"\n"+couleur;
    };
    };
    j'obtient successivement 000000FF, 00000000, 00000000.
    Pourquoi, comment corriger cette erreur?

  2. #2
    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 !

    Quelle est la définition du bitmap ?

    A plus !

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 57
    Points : 41
    Points
    41
    Par défaut
    L'image pourrait être en 16 couleur. Vue l'éclat du rouge.

    Mais l'image est en RGB 8 bit. Je devrai traiter d'autre image de cette nature et sans les transformer.

  4. #4
    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 !

    Les bitmaps 8 bits disposent d'une palette qui contient les 256 couleurs (RGB).
    ScanLine ne renvoie qu'un simple index correspondant à une entrée de la palette.

    Pour récupérer la couleur (composantes RGB):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TColor couleur = ...Canvas->Pixels[x][y];
    Et pour récupérer le niveau de rouge :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Byte red = GetRValue(Couleur);
    GetGValue(..) pour le vert et GetBValue(..) pour le bleu

    A plus !

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 57
    Points : 41
    Points
    41
    Par défaut
    On m'avait dit que Scanline pouvait servir pour couleur est qu'il est plus rapide que pixel[x][y].

    Donc ceci n'eqst valable que pour des images ayant plus de couleur c'est ça?

    à tous hasard (si j'avait mal compris) j'ai testé se code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    for (int y=0;y<ymax;y+=4)
    {line=(Byte *)Image2->Picture->Bitmap->ScanLine[y];
    for (int x=0;x<xmax;x+=4)
    {couleur=IntToHex(GetRValue(line[x]),8);
    Label2->Caption=Form1->Label2->Caption+"\n"+couleur;
    };
    };
    et Il me renvoie la même suite.

  6. #6
    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 !

    Pour faire simple au choix :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TCanvas *C = Image2->Picture->Bitmap->Canvas;//Image2 est un TImage
    TCanvas *C = Image2->Canvas;//Image2 est un Graphics::TBitmap
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ...
    TColor couleur = C->Pixels[x][y];  
    Byte red = GetRValue(couleur);
    Label2->Caption = Label2->Caption + "\n" + IntToStr(red); 
    ...
    Ce qui se rédige facilement sur une seule ligne.

    Ca fonctionne quelque soit la résolution du bitmap.
    Je n'ai jamais réussi à appliquer ScanLine sur des bitmaps 24 bits!
    A vérifier... car je ne sais pas !
    Mais par contre ScanLine renvoie bien un index (Byte) avec des bitmap 8 bits,
    la teinte (composantes RVB) elle, est dans la palette du bitmap !

    Je ne me souviens plus pour "\n" ?

    A plus !

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 57
    Points : 41
    Points
    41
    Par défaut
    merci beaucoups.
    "\n" veut dire retour à la ligne.

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

Discussions similaires

  1. remplissage de zones de couleur avec scanline
    Par Basile le disciple dans le forum Débuter
    Réponses: 46
    Dernier message: 28/03/2019, 12h25
  2. Mettre de la couleur avec conio
    Par pi-2r dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 28/06/2006, 17h13
  3. Réponses: 2
    Dernier message: 26/04/2006, 21h34
  4. comment mettre de la couleur avec format/write ?
    Par gedeon555 dans le forum Langage
    Réponses: 2
    Dernier message: 10/02/2006, 09h12
  5. Transformation d'images avec Scanline
    Par bastien dans le forum C++Builder
    Réponses: 4
    Dernier message: 24/09/2004, 20h39

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