web-dev-qa-db-ja.com

プログラムで.NetWinFormsコントロールのスクリーンキャプチャを取得するにはどうすればよいですか?

.Netコントロールの画像をプログラムで取得するにはどうすればよいですか?

32
user34787

DrawToBitmap と呼ばれるすべてのコントロールにメソッドがあります。これを行うためにp/invokeする必要はありません。

Control c = new TextBox();
System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(c.Width, c.Height);
c.DrawToBitmap(bmp, c.ClientRectangle);
49
Will

.NETで始まるControlクラスのDrawToBitmapメソッドを使用して、プログラムで非常に簡単に.NETコントロールの画像を取得できます。 2.0

これがVBのサンプルです

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

そしてここにそれはC#にあります:

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

Control.DrawToBitmap では、ほとんどのコントロールをビットマップに描画できます。これは、RichTextBoxやその他の一部では機能しません。

これら、またはそれらの1つを持つコントロールをキャプチャする場合は、このCodeProjectの記事で説明されているようにPInvokeを実行する必要があります。 Image Capture

これらのメソッドのいくつかは画面に表示されているものをすべてキャプチャすることに注意してください。そのため、コントロールをカバーする別のウィンドウがある場合は、代わりにそれを取得します。

5
Hallgrim

これをサポートするWinFormsコントロールの場合、System.Windows.Forms.Controlクラスに次のメソッドがあります。

public void DrawToBitmap(Bitmap bitmap, Rectangle targetBounds);

ただし、これはすべてのコントロールで機能するわけではありません。サードパーティコンポーネントベンダーは、より包括的なソリューションを提供しています。

3
Alan

これは、クライアント領域(タイトルバーやその他のドレッシングがない)だけでなく、Form全体に対してこれを行う方法です。

        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);
2
Mark Lakata
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

注:正常に動作しています

1
R Muruganandhan

実行しようとしているコントロール上にない場合は、通常、基本のControlクラスにキャストして、そこでDrawToBitmapメソッドを呼び出すことができます。

1
Nick