Visualizzazione dei risultati da 1 a 6 su 6

Discussione: [VB.NET] GetPixel

  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    143

    [VB.NET] GetPixel

    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.

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    143

    VB.NET] GetPixel

    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

  3. #3
    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.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    143
    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

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    143
    temo che faccio cofusione

    le API hanno altro codice

    mi aiuti?

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    143
    Ti ringrazio tanto

    con le coordinate-schermo

    va bene!

    non mi serve altro.

    Grazie tante ancora

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.