Oppure

Loading
05/05/11 21:09
air
Ciao a tutti, volevo fare un pultante per salvare il mio form in vb come immagine.
Avevo pensato di catturare lo schermo, metterlo in una picture e ritagliarla alla dimensini del form ma sto avento qualche piccolo problema. Posto il codice:

Public Class frm_salva

    Private Sub btn_save_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_save.Click
        FolderBrowserDialog1.ShowDialog() 'seleziona il percorso il cui salvare i file'
        txt_percorso.Text = FolderBrowserDialog1.SelectedPath 'metto il percorso
    End Sub

    Private Sub btn_salva_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_salva.Click
        pic_save.Image = CaptureScreen()
        Dim x, y, l, h As Short
        l = pic_save.Width
        h = pic_save.Height
        'nuova immagine delle dimensioni della tua picturebox
        Dim img As New Bitmap(l, h)
        x = Me.Location.X
        y = Me.Location.Y
        l = Me.Width
        h = Me.Height
        'classe graphic dell'immagine
        Dim pb_graphic As Graphics = Graphics.FromImage(img)
        'ne prende una parte
        pb_graphic.DrawImageUnscaled(pic_save.Image, 0, 0, l, h)
        'assegna alla tua immagine l'immagine ridimensionata
        pic_save.Image = img
        pic_save.Image.Save(txt_percorso.Text & "\prova.jpeg")
        MsgBox("Salvato!")
    End Sub
    Private Function CaptureScreen() As System.Drawing.Bitmap
        ' Creo un oggetto bitmap di dimensioni uguali allo schermo
        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)
        ' Restituisco l'oggetto bitmap
        Return b
    End Function
End Class


il problema credo sia la funzione drawimageunscaled... Qualcuno sa di preciso come funziona???
Ultima modifica effettuata da air 05/05/11 21:17
aaa
05/05/11 22:31
Question
In teoria dovresti dire dove e quale eccezione ti viene restituita 8-|
Perché stai usando drawimageunscaled? Non va bene drawimage?

Comunque, ti linko ad una libreria che permette di catturare una finestra solo con l'handle:
developerfusion.com/code/4630/capture-a-screen-shot/
aaa
06/05/11 11:10
walker93
Non hai bisogno di catturare tutto lo schremo e tagliarlo prima di salvarlo...
Il metodo Graphics.CopyFromScreen ti permette di catturare una parte dello schermo:
Se tu anzichè g.CopyFromScreen( 0, 0, 0, 0 ecc...) usi
g.CopyFromScreen( Me.Left, Me.Top, 0, 0 ecc...) partirai a catturare dalle coordinate del form... ovviamente
Dim b As Bitmap = New Bitmap(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height)
Dim sz As Size = New Size(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height)

non andranno più bene perchè ti serviranno delle stesse dimensioni della form e non dello schermo...

msdn.microsoft.com/it-it/library/…
aaa