Appunti di Programmazione

Creative Commons License

Copiare un'area dello schermo con VB .Net

Con il seguente codice è possibile copiare una qualunque zona dello schermo e memorizzarla in un'immagine:

Class Form1

    Private Function CopiaAreaSchermo() As System.Drawing.Bitmap

        'definizione dell'area dello schermo da copiare: in questo caso è una porzione rettangolare di 150x200 pixel e il suo
        'angolo superiore SX è situato nel punto (500,296) dello schermo

        Dim areaDaCopiare As Rectangle = New Rectangle(500, 296, 150, 200)

        'definizione del punto in cui vogliamo che l'immagine copiata venga rappresentata nella nostra Form
        Dim posizione As Point = New Point(20, 30)

        'impostazione della bitmap che memorizzerà l'immagine da copiare
        Dim immagineCopiata As Bitmap = New Bitmap(150, 200)

        'creazione di un'istanza dell'oggetto Graphics
        Dim g As Graphics = Graphics.FromImage(immagineCopiata)

        'si copia l'area scelta
        g.CopyFromScreen(areaDaCopiare.X, areaDaCopiare.Y, posizione.X, posizione.Y, New Size(150, 200), _
                         CopyPixelOperation.SourceCopy)
                         
        Return immagineCopiata

    End Function

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        Me.BackgroundImageLayout = ImageLayout.None

        'si carica l'immagine copiata nello sfondo della Form
        Me.BackgroundImage = CopiaAreaSchermo()

    End Sub

End Class

Come copiare tutto lo schermo

Se vogliamo effettuare lo screenshot di tutto lo schermo, è sufficiente cambiare le dimensioni dell'area da catturare e i punti in cui iniziare a copiare e dove inserire l'immagine.

Class Form1

    Private Function CopiaAreaSchermo() As System.Drawing.Bitmap

        'definizione dell'area dello schermo da copiare: 
        Dim areaDaCopiare As Rectangle = New Rectangle(0, 0, My.Computer.Screen.WorkingArea.Width, _
                                                       My.Computer.Screen.WorkingArea.Height)

        'impostazione della bitmap che memorizzerà  l'immagine da copiare
        Dim immagineCopiata As Bitmap = New Bitmap(areaDaCopiare.Width, areaDaCopiare.Height)

        'creazione di un'istanza dell'oggetto Graphics
        Dim g As Graphics = Graphics.FromImage(immagineCopiata)

        'si copia l'area scelta
        g.CopyFromScreen(0, 0, 0, 0, New Size(areaDaCopiare.Width, areaDaCopiare.Height), _
                         CopyPixelOperation.SourceCopy)

        Return immagineCopiata

    End Function

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        Me.BackgroundImageLayout = ImageLayout.None

        'si carica l'immagine copiata nello sfondo della Form
        Me.BackgroundImage = CopiaAreaSchermo()

    End Sub

End Class