GetPixel to Color

Signaler
Messages postés
6
Date d'inscription
mercredi 6 août 2008
Statut
Membre
Dernière intervention
26 avril 2012
-
Messages postés
6
Date d'inscription
mercredi 6 août 2008
Statut
Membre
Dernière intervention
26 avril 2012
-
Bonjour,

Sous VB.net 2008, j'utilise la fonction API GetPixel qui me renvoie un long (par exemple 51539607551) mais je n'arrive pas à le convertir en color


Public Declare Function GetPixel Lib "gdi32.dll" (ByVal hdc As IntPtr, ByVal nXPos As Integer, ByVal nYPos As Integer) As Long

Dim C1 As Long
Dim Color1 As Color
Dim alpha As Long
Dim Blue As Long
Dim Green As Long
Dim Red As Long


C1 = GetPixel(me.Handle, 50, 50)
Red = Int(C1 And &HFF)
Green = Int((C1 And &H100FF00) / &H100)
Blue = Int((C1 And &HFF0000) / &H10000)

Color1 = Color.FromArgb(255, Red, Green, Blue)

Et plantage à l'affectation de Color1 car Green dépasse 255

Faut-il décomposer Green en Green et Alpha ?

6 réponses

Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
Salut,

couleur = GetPixel(me.Handle, 50, 50)
Red = couleur Mod 256
Green = Int(couleur / 256 ^ 1) Mod 256
Blue = Int(couleur / 256 ^ 2) Mod 256

C'est du VB6/VBA mais tu devrais t'en sortir avec cela. L'essentiel ici est l’opérateur "Mod"

A+
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
234
Bonjour,
Ton plantage est essentiellement généré par tes typages, notamment dans la déclaration de ta fonction
Pas de long en VB.Net


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
234
Voilà de quoi t'inspirer :
Tapez le texte de l'url ici.
Tu y as tout ce dont tu as besoin et plus ...
Observe les typages

Ceci étant dit : je ne serais pas surpris (ce serait même plutôt le contraire) que VB.net t'offre autre chose, sans passer par l'Api de Windows !
Un VB.Nettiste (ce que je ne suis pas) devrait t'en faire la remarque.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
6
Date d'inscription
mercredi 6 août 2008
Statut
Membre
Dernière intervention
26 avril 2012

Si GetPixel doit retourner un INT32, il retourne -1

GetPixel fonctionne si il retourne un Long ou INT64

Quand j'effectue un GetPixel sur un Color.PeachPuff, j'obtiens 25769803775 soit #5FFFFFFFF
au lieu de #FFFFDAB9 (4294957753)

D'où viens l'erreur ?
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
234
Je n'en sais rien sans voir ton code corrigé


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
6
Date d'inscription
mercredi 6 août 2008
Statut
Membre
Dernière intervention
26 avril 2012

Voici le code


Public Declare Function GetPixel Lib "gdi32.dll" (ByVal hdc As IntPtr, ByVal nXPos As Integer, ByVal nYPos As Integer) As Int64

Dim C1 As Long


Me.BackColor = Color.PeachPuff
' la couleur de PeachPuff est 4294957753 soit #FFFFDAB9

C1 = GetPixel(Me.Handle, 5, 5)
' C1 = 25769803775 soit #5FFFFFFFF