c# - Come ottenere una cattura schermo di un controllo.Net WinForms a livello di programmazione?




image capture (7)

se non è sul controllo che si sta provando a fare, di solito si può lanciarlo alla classe di controllo di base e chiamare il metodo DrawToBitmap lì.

Come si ottiene a livello di codice un'immagine di un controllo .Net?


È possibile ottenere una visione di un controllo .NET a livello di codice piuttosto facilmente utilizzando il metodo DrawToBitmap della classe Control che inizia in .NET 2.0

Ecco un esempio in VB

    Dim formImage As New Bitmap("C:\File.bmp")
    Me.DrawToBitmap(formImage, Me.Bounds)

Ed eccolo in C #:

 Bitmap formImage = New Bitmap("C:\File.bmp")
 this.DrawToBitmap(formImage, this.Bounds)

Control.DrawToBitmap ti permetterà di disegnare la maggior parte dei controlli su una bitmap. Questo non funziona con RichTextBox e altri. Se vuoi catturare questi, o un controllo che ne ha uno, allora devi fare PInvoke come descritto nell'articolo del progetto di codice http://www.codeproject.com/KB/graphics/imagecapture.aspx , suggerito da Jeff . Assicurati che alcuni di questi metodi catturino tutto ciò che è sullo schermo, quindi se hai un'altra finestra che copre il tuo controllo, otterrai questo.


Per i controlli WinForm che lo supportano, esiste un metodo nella classe System.Windows.Forms.Control:

public void DrawToBitmap(Bitmap bitmap, Rectangle targetBounds);

Questo non funziona con tutti i controlli, tuttavia. I fornitori di componenti di terze parti hanno soluzioni più complete.


Questo è come farlo per un intero Form , non solo per l'area Client (che non ha la barra del titolo e l'altra medicazione)

        Rectangle r = this.Bounds;
        r.Offset(-r.X,-r.Y);
        Bitmap bitmap = new Bitmap(r.Width,r.Height);
        this.DrawToBitmap(bitmap, r);
        Clipboard.SetImage(bitmap);

Panel1.Dock = DockStyle.None ' If Panel Dockstyle is in Fill mode
Panel1.Width = 5000  ' Original Size without scrollbar
Panel1.Height = 5000 ' Original Size without scrollbar

Dim bmp As New Bitmap(Me.Panel1.Width, Me.Panel1.Height)
Me.Panel1.DrawToBitmap(bmp, New Rectangle(0, 0, Me.Panel1.Width, Me.Panel1.Height))
'Me.Panel1.DrawToBitmap(bmp, Panel1.ClientRectangle)
bmp.Save("C:\panel.jpg", System.Drawing.Imaging.ImageFormat.Jpeg)

Panel1.Dock = DockStyle.Fill

Nota: funziona bene


Potresti anche provare a utilizzare:

Environment.UserName;

Come questo...:

string j = "Your WindowsXP Account Name is: " + Environment.UserName;

Spero che questo sia stato utile.





c# .net image winforms capture