GetPixel to Color

61euclide Messages postés 6 Date d'inscription mercredi 6 août 2008 Statut Membre Dernière intervention 26 avril 2012 - 26 avril 2012 à 09:46
61euclide Messages postés 6 Date d'inscription mercredi 6 août 2008 Statut Membre Dernière intervention 26 avril 2012 - 26 avril 2012 à 11:36
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

bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
26 avril 2012 à 10:00
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+
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
26 avril 2012 à 10:14
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
26 avril 2012 à 10:21
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
0
61euclide Messages postés 6 Date d'inscription mercredi 6 août 2008 Statut Membre Dernière intervention 26 avril 2012
26 avril 2012 à 10:58
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 ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
26 avril 2012 à 11:19
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
0
61euclide Messages postés 6 Date d'inscription mercredi 6 août 2008 Statut Membre Dernière intervention 26 avril 2012
26 avril 2012 à 11:36
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
0
Rejoignez-nous