Couleur SetPixel différente de couleure GetPixel sous Windows 2000 [Résolu]

Signaler
Messages postés
19
Date d'inscription
lundi 20 octobre 2003
Statut
Membre
Dernière intervention
1 mars 2005
-
Messages postés
4172
Date d'inscription
mercredi 30 juillet 2003
Statut
Membre
Dernière intervention
9 juin 2006
-
Salut,



J'ai un problème sous Windows 2000 avec les couleurs des API SetPixel et GetPixel.

La couleur que me renvoie GetPixel est différente de celle que j'ai crée avec SetPixel alors que ça marche sous Win XP.



Serait-il possible que quelqu'un qui a Win 2000 essaye la routine suivante sur son poste ?



Private Sub Form_Load()



Dim i As Long

Dim j As Long

Dim lngColor As Long





For i = 1 To 100



lngColor = lngColor + 1

SetPixel Form1.hdc, i, 1, lngColor

If GetPixel(Form1.hdc, i, 1)
<> lngColor Then MsgBox lngColor & " " &
GetPixel(Form1.hdc, i, 1)



Next i





End Sub



Merci

12 réponses

Messages postés
4172
Date d'inscription
mercredi 30 juillet 2003
Statut
Membre
Dernière intervention
9 juin 2006
27
C'est pour cette raison que SetPixel te retourne la valeur de al couleur qu'il a réellement affecté au pixel, afin que tu puisses être sûr de la couleur du pixel, quel que soit la config graphique du poste ou s'execute ton code

Christophe R
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 179 internautes nous ont dit merci ce mois-ci

Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
29
ajoutes ça avant: Form1.Show

Daniel
Messages postés
19
Date d'inscription
lundi 20 octobre 2003
Statut
Membre
Dernière intervention
1 mars 2005

Merci mais ça ne change rien, d'ailleur, j'ai le problème aussi dans
une PictureBox et ce quel que soit l'instant auquel j'appelle les API.
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
29
ta Forme n'étant pas encore initialisée, c'est normal il n'y a pas encore les couleurs.
essayes de mettre ta procédure dans un bouton au lieu de le faire dans Form_Load.

Daniel
Messages postés
19
Date d'inscription
lundi 20 octobre 2003
Statut
Membre
Dernière intervention
1 mars 2005

Si, il y a des couleurs, mais elles ne correspondent pas. J'ai
quand même essayé avec un CommandButton mais rien y fait. Comme je l'ai
dit plus haut: j'ai le problème aussi dans
une PictureBox et ce quel que soit l'instant auquel j'appelle les API.


Ce n'est donc pas un problème d'initialisation de la Form.
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
29
vraiment une couleur différente ?
parce que si c'est -1 c'est que c'est une erreur: PictureBox non visible ou coordonnées en dehors.
sinon je vois pas la raison.

Daniel
Messages postés
19
Date d'inscription
lundi 20 octobre 2003
Statut
Membre
Dernière intervention
1 mars 2005

Désolé pour les tailles des polices du message précédent.



Oui, il y a bien des couleurs:



pour des valeurs de couleurs en décimal:



SetPixel = 0 GetPixel retourne: 0

SetPixel = 1 GetPixel retourne: 0

...

SetPixel = 7 GetPixel retourne: 0

SetPixel = 8 GetPixel retourne: 8

SetPixel = 9 GetPixel retourne: 8

...

SetPixel = 15 GetPixel retourne: 8

SetPixel = 16 GetPixel retourne: 16

SetPixel = 17 GetPixel retourne: 16

...

SetPixel = 23 GetPixel retourne: 16

SetPixel = 24 GetPixel retourne: 24

SetPixel = 25 GetPixel retourne: 24



Ca parrait plutôt linéaire dans ces valeurs, mais pour des nombres plus élevés, getPixel retourne aussi des nombres impaires (33, 35 ...)
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
29
excuses moi de te poser encore des questions, mais ça me semble bizarre.
donc si c'est pas -1 c'est bien une couleur.
je vois encore une chose possible.
est-ce que ça renvoie pas la couleur précédente, c'est à dire que SetPixels n'aurait pas d'effet. est-ce AutoRedraw est bien à True ?

Daniel
Messages postés
4172
Date d'inscription
mercredi 30 juillet 2003
Statut
Membre
Dernière intervention
9 juin 2006
27
Une piste !! Ton SetPixel se base sur une couleur dont les 3 composantes Rouge Vert et Bleu vont de 0 à 255, ce qui nous fait un peu plus de 16 millions de combinaisons possible, donc de couleurs possibles. Mais si ta config graphique n'est aps en 16 millions de couleurs (65 et des brouettes par exemple) Le setpixel, doit en fait donner au pixel la couleur la plus approchante possible en fonction de la palette de couleur que tu as configurer pour ta carte graphique. Le Getpixel, lui, te retourne la couleur du pixel réel ! Le défaut vient sans doute de la. Modifie ta config graphique dans le panneau de config windows et refait le test

Christophe R
Messages postés
19
Date d'inscription
lundi 20 octobre 2003
Statut
Membre
Dernière intervention
1 mars 2005

Oui, j'y avais pensé, AutoRedraw est bien à true
Messages postés
4172
Date d'inscription
mercredi 30 juillet 2003
Statut
Membre
Dernière intervention
9 juin 2006
27
MSDN semble confirmer la piste que je viens de te donner en précisant pour al valeur de retour de Setpixel ceci :

If the function succeeds, the return value is the RGB value that the function sets the pixel to. This value may differ from the color specified by crColor; that happens when an exact match for the specified color cannot be found.

Christophe R
Messages postés
19
Date d'inscription
lundi 20 octobre 2003
Statut
Membre
Dernière intervention
1 mars 2005

Ouf...



Merci à vous deux de votre aide. C'était bien la config graphique (je n'était qu'en 16 bits)