Getpixel sur un picturebox invisible

Résolu
cs_mabrouklepoux Messages postés 84 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 25 juillet 2008 - 19 déc. 2007 à 16:56
cs_mabrouklepoux Messages postés 84 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 25 juillet 2008 - 20 déc. 2007 à 22:11
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

Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 11
19 déc. 2007 à 21:34
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)
....
3
fsltp Messages postés 94 Date d'inscription lundi 26 novembre 2007 Statut Membre Dernière intervention 16 janvier 2008
19 déc. 2007 à 21:02
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+
0
cs_mabrouklepoux Messages postés 84 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 25 juillet 2008 1
19 déc. 2007 à 21:40
merci a tous, je vais regarder tout ca, je vous tiens au jus
0
cs_mabrouklepoux Messages postés 84 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 25 juillet 2008 1
20 déc. 2007 à 10:28
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 ...
0

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

Posez votre question
Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 11
20 déc. 2007 à 18:23
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
0
cs_mabrouklepoux Messages postés 84 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 25 juillet 2008 1
20 déc. 2007 à 22:11
merci pour l'explication et tout le reste !
"j'ai tout compris, c'est un plan excellent"
Schulman
0
Rejoignez-nous