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

cushy007 19 Messages postés lundi 20 octobre 2003Date d'inscription 1 mars 2005 Dernière intervention - 25 févr. 2005 à 10:27 - Dernière réponse : crenaud76 4172 Messages postés mercredi 30 juillet 2003Date d'inscription 9 juin 2006 Dernière intervention
- 25 févr. 2005 à 14:57
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
Afficher la suite 

12 réponses

Meilleure réponse
crenaud76 4172 Messages postés mercredi 30 juillet 2003Date d'inscription 9 juin 2006 Dernière intervention - 25 févr. 2005 à 14:57
3
Merci
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

Merci crenaud76 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Gobillot 3140 Messages postés vendredi 14 mai 2004Date d'inscription 31 mars 2015 Dernière intervention - 25 févr. 2005 à 11:32
0
Merci
ajoutes ça avant: Form1.Show

Daniel
cushy007 19 Messages postés lundi 20 octobre 2003Date d'inscription 1 mars 2005 Dernière intervention - 25 févr. 2005 à 13:43
0
Merci
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.
Gobillot 3140 Messages postés vendredi 14 mai 2004Date d'inscription 31 mars 2015 Dernière intervention - 25 févr. 2005 à 13:46
0
Merci
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
cushy007 19 Messages postés lundi 20 octobre 2003Date d'inscription 1 mars 2005 Dernière intervention - 25 févr. 2005 à 14:03
0
Merci
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.
Gobillot 3140 Messages postés vendredi 14 mai 2004Date d'inscription 31 mars 2015 Dernière intervention - 25 févr. 2005 à 14:13
0
Merci
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
cushy007 19 Messages postés lundi 20 octobre 2003Date d'inscription 1 mars 2005 Dernière intervention - 25 févr. 2005 à 14:24
0
Merci
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 ...)
Gobillot 3140 Messages postés vendredi 14 mai 2004Date d'inscription 31 mars 2015 Dernière intervention - 25 févr. 2005 à 14:31
0
Merci
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
crenaud76 4172 Messages postés mercredi 30 juillet 2003Date d'inscription 9 juin 2006 Dernière intervention - 25 févr. 2005 à 14:40
0
Merci
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
cushy007 19 Messages postés lundi 20 octobre 2003Date d'inscription 1 mars 2005 Dernière intervention - 25 févr. 2005 à 14:42
0
Merci
Oui, j'y avais pensé, AutoRedraw est bien à true
crenaud76 4172 Messages postés mercredi 30 juillet 2003Date d'inscription 9 juin 2006 Dernière intervention - 25 févr. 2005 à 14:43
0
Merci
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
cushy007 19 Messages postés lundi 20 octobre 2003Date d'inscription 1 mars 2005 Dernière intervention - 25 févr. 2005 à 14:53
0
Merci
Ouf...



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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.