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

 Delphi Discussion :

[D7] Couleur d'un pixel


Sujet :

Delphi

  1. #1
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 345
    Points : 3 123
    Points
    3 123
    Par défaut [D7] Couleur d'un pixel
    Bonjour,

    j'ai un TImage (Img1) qui contient un bitmap. il est en Autosize = True, Stretch = True et Align = AlClient.

    Je souhaite récupérer la couleur du pixel sous le curseur, dans un Click souris.

    Dans le MouseDown de Img1, je récupère X et Y position de la souris. Pour trouver la couleur en X,Y, je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      With F_Img.Img1.Picture.Bitmap.Canvas do
          CouleurPixel:=Pixels[X,Y];
    mais je ne récupère pas la bonne couleur. Il y a un décalage des coordonnées.

    Comment faire ?

    A noter que si Autosize est à False, ça fonctionne bien

    Merci

    A+
    Charly

  2. #2
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    tu espères quoi avec Autosize = True, Stretch = True et Align = AlClient ?

    AutoSize force le Timage a avoir la taille en pixels de l'image
    Strech c'est pour étirer l'image sur la surface du TImage
    Align = alClient c'est pour que le TImage prenne la taille de son parent

    c'est pas un peu contradictoire tout cela ?!
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Il est peut-être possible de trouver le facteur de taille ? Ainsi tu pourrais multiplier les X et Y
    Cela écrit ce n'est qu'une piste que je ne vais pas poursuivre
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  4. #4
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 345
    Points : 3 123
    Points
    3 123
    Par défaut
    Ah oui, je me suis trompé, j'ai Stretch = False !

    est ce qu'il ne faudrait pas que je copie le Bitmap sur un Bitmap en mémoire qui conserverait peut être les bonnes coordonnées ?

    A+
    Charly

  5. #5
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Salut,

    dans mes ColorPickers, j'utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      DC := GetDC(HWND_DESKTOP);
      Couleur := GetPixel(DC, Mouse.CursorPos.x, Mouse.CursorPos.y);
      ReleaseDC(HWND_DESKTOP, DC);
    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var
      DC: HDC;
      Couleur: TColor;
    Enjoy,
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  6. #6
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 345
    Points : 3 123
    Points
    3 123
    Par défaut
    Bonjour,

    Voici un code qui fonctionne en corrigeant les coordonnées selon l'idée de SergioMarter :

    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
    { ======================================================================== }
    procedure TF_Img.Img1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    Var
      CouleurPixel : TColor ;
      X1,Y1 : Integer ;
      X2,Y2 : Integer ;
      Coef : Real ;
      Rapport1 , Rapport2 : Real ;
    begin
      X1 := Img1.Width ;
      Y1 := Img1.Height ;
      If Y1 >0 Then Rapport1 := X1 / Y1 Else Rapport1 := 0 ;
      If Haut >0 Then Rapport2 := Larg / Haut Else Rapport2 := 0 ;
      // Calcul du coefficient de correction des coordonnées en fonction de la forme de l'image
      // originale par rapport à celle de l'image à l'écren
      If Rapport1 > Rapport2 Then Coef := Haut / Y1
                             Else Coef := Larg / X1 ;
      X2 := Round(X * Coef) ;            //  Coordonnées corrigées
      Y2 := Round(Y * Coef) ;
      // Récupération de la couleur sous la souris
      With F_Img.Img1.Canvas Do     
          CouleurPixel:=Pixels[X2,Y2];
      M1.Color := CouleurPixel ;
    end;
    { ======================================================================== }
    Je vais maintenant tester la solution de Jipété qui parait plus simple.

    A+
    Charly

  7. #7
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 345
    Points : 3 123
    Points
    3 123
    Par défaut
    La solution de Jipété fonctionne admirablement Bien et est beaucoup plus simple.

    Merci à tous et en particulier à Jipété !

    A+
    Charly

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

Discussions similaires

  1. [VB.NET]Comment recupérer la couleur d'un pixel de l'Ecran ?
    Par cyrcroix dans le forum Windows Forms
    Réponses: 24
    Dernier message: 07/11/2007, 10h35
  2. Réponses: 1
    Dernier message: 26/03/2005, 12h31
  3. [TBitmap] Recuperer la couleur d un pixel
    Par DamessS dans le forum C++Builder
    Réponses: 2
    Dernier message: 14/12/2004, 08h47
  4. [VB6] Comment récupérer la couleur d'un pixel de l'écran?
    Par Taurëndil dans le forum VB 6 et antérieur
    Réponses: 14
    Dernier message: 26/03/2004, 08h02
  5. Obtenir la couleur d'un pixel
    Par GLDavid dans le forum OpenGL
    Réponses: 2
    Dernier message: 09/03/2004, 18h21

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