Ciao a tutti
è possibile avere la funzione getPixel
dello schermo, magari con le api, senza
dover fare la copia dello schermo, nel
linguaggio vb.net?
Ringrazio tanto chi mi aiuta.
Ciao a tutti
è possibile avere la funzione getPixel
dello schermo, magari con le api, senza
dover fare la copia dello schermo, nel
linguaggio vb.net?
Ringrazio tanto chi mi aiuta.
Ho provato con questo codice trovato su internet.
Nel form1 metto la PictureBox1 colorata di rosso
in pc1 penso di trovare il color rosso della pictureBox1
invece ottengo questo colore Color [A=255, R=240, G=240, B=240]
dove sbaglio?
codice:Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim pc1 As Color Dim cX As Integer Dim cY As Integer Dim b As Bitmap = New Bitmap(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height) ' Creo l'oggetto graphics Dim g As Graphics = Graphics.FromImage(b) ' Definisco un oggetto Size con le dimensioni dello schermo Dim sz As Size = New Size(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height) ' Catturo l'intera area dello schermo g.CopyFromScreen(0, 0, 0, 0, sz, CopyPixelOperation.SourceCopy) cX = PictureBox1.Location.X cY = PictureBox1.Location.Y pc1 = b.GetPixel(PictureBox1.Location.X + 2, PictureBox1.Location.Y + 2) TextBox1.Text = cX TextBox2.Text = cY TextBox3.Text = pc1.ToString End Sub
Il problema è che le coordinate della tua PictureBox sono riferite all'area client del tuo form, mentre l'immagine catturata dallo schermo è in coordinate-schermo; per convertire le coordinate puoi usare il metodo PointToScreen del form in cui si trova la picturebox.
Per inciso, per fare quello che chiedevi all'inizio potevi usare la API GetPixel creando un DC relativo all'intero schermo con la GetDC(NULL) (che alla fine va rilasciato usando ReleaseDC).
Amaro C++, il gusto pieno dell'undefined behavior.
Ti ringrazio per l'aiuto, vorrei poter usare le API
ed ho trovato questo in internet
codice:Private Sub Form1_HandleCreated(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.HandleCreated Grp = Me.CreateGraphics hDC = New HandleRef(Grp, Grp.GetHdc) End Sub Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing DirectCast(hDC.Wrapper, Graphics).ReleaseHdc() Grp.Dispose() End Sub
non so se fa per me e non so come fare il GetPixel
temo che faccio cofusione
le API hanno altro codice
mi aiuti?
Ti ringrazio tanto
con le coordinate-schermo
va bene!
non mi serve altro.
Grazie tante ancora