Getpixel sur un picturebox invisible [Résolu]

Signaler
Messages postés
84
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
25 juillet 2008
-
Messages postés
84
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
25 juillet 2008
-
Bonjour,
voila, je fais a un moment une copie écran dans un picturebox invisible
mon souci est que quand je fais un getpixel sur ce picture box, il me renvoi que du blanc, alors que si je le met en visible, il me renvoi bien les bonnes couleurs ...
quoi faire ???

recup hdc :
init projet :
        hdc = GetDC(Cuore.PictureBox1.Handle)
appelé par un timer
[...]
        Cuore.PictureBox1.Visible = True
        Cuore.Refresh()
        RGBPx = GetPixel(hdc, X, Y)
        Cuore.PictureBox1.Visible = False
        Cuore.Refresh()
        pixel.red = &HFF And RGBPx
        pixel.green = (&HFF00 And RGBPx) \ 256
        pixel.blue = (&HFF0000 And RGBPx) \ 65536
si je mets pas les visible ca marche pas, si je les mets, ca marche, mais ca fait un peu vomir de regarder le truc tourner ...

merci d'avoir lu
si si j'insiste
mais là vous pouvez arreter, j'ai fini
il faut me laisser, j'ai du travail.
faut répondre maintenant.
vous me genez ...
tout va si vite entre nous !

6 réponses

Messages postés
843
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
7 janvier 2009
7
Pourquoi passes-tu par une PictureBox?

Tu peux très bien faire ca sans, et t'aura plus de problèmes.. de plus c'est p't'etre bien plus rapide

Dim Pic as Image = [obtenir l'image du printscreen]
Dim Col as Color = Pic.GetPixel(X, Y)
....
Messages postés
94
Date d'inscription
lundi 26 novembre 2007
Statut
Membre
Dernière intervention
16 janvier 2008

Bonsoir,
peut etre un truc a essayer qui n'est pas forcement tres logique mais bon...
laisse le picturebox visible mais lui mettre de coordonnées hors ecran*
du genre
Picture1.Top = -15000
Picture1.Left = -15000
ca peut contourné ton pb
qui sait
nour redire...
a+
Messages postés
84
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
25 juillet 2008
1
merci a tous, je vais regarder tout ca, je vous tiens au jus
Messages postés
84
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
25 juillet 2008
1
bon, j'ai faillit mourru, mais j'ai survécu
kevin, tu avais raison, c le plus simple, mmeme si l'idée de le foutre hors écran devrait aussi marcher (c un peu illogique, donc VB devrait aimer )

j'ai pr&éféré taper direct dans l'image renvoyée par le printscreen.
j'ai juste perdu des heures à chercher un moyen de lire un pixel d'un type image, et rien trouvé
il suffit en fait de prendre le type bitmap, et non image ... qu'on m'explique pourquoi image on peut pas ...

pour historique, le code qui amrche :

récupérer l'écran:

        System.Windows.Forms.SendKeys.SendWait("^{PRTSC}")
        CurScreen = CType(System.Windows.Forms.Clipboard.GetDataObject.GetData(System.Windows.Forms.DataFormats.Bitmap), Bitmap)
        Cuore.PictureBox1.Image = CurScreen 'juste pour que je vois mon image

ensuite lire le bitmap:

        tmpcol = CurScreen.GetPixel(X, Y)
        CurPixelColor.red = tmpcol.R
        CurPixelColor.green = tmpcol.G
        CurPixelColor.blue = tmpcol.B

encore une fois merci à vbfrance ...
Messages postés
843
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
7 janvier 2009
7
Harf ouais bien sur, c'est la clase Bitmap et non Image qu'il faut utiliser...
J'ai tapé ca vite fait, je t'aurais fais gagner une heure si j'avais fais un peu attention, dsl

Sinon, pour capturer l'écran, tu peux aussi utiliser la fonction CopyFromScreen de Graphics:
http://msdn2.microsoft.com/en-us/library/system.drawing.graphics.copyfromscreen.aspx
Mais t'es obligé de passer par un Graphics, donc dans ton cas je pense que ta méthode est plus simple.. mais si jamais tu utlise de toute facon un Graphics pour modifier ton image, penses-y

Sinon, pour l'histroie de Image vs Bitmap, la classe abstraite Image n'est pas forcément une image composée de pixels. C'est à dire que Image sert aussi de base pour la classe System.Drawing.Imaging.Metafile, qui est une image composé.. il est donc normal que Get et SetPixel soient implémenté dans la classe spécifique à une image composé de pixels: Bitmap

Bonne chance pour la suite
Messages postés
84
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
25 juillet 2008
1
merci pour l'explication et tout le reste !
"j'ai tout compris, c'est un plan excellent"
Schulman