.Netコントロールの画像をプログラムで取得するにはどうすればよいですか?
DrawToBitmap と呼ばれるすべてのコントロールにメソッドがあります。これを行うためにp/invokeする必要はありません。
Control c = new TextBox();
System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(c.Width, c.Height);
c.DrawToBitmap(bmp, c.ClientRectangle);
.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)
Control.DrawToBitmap では、ほとんどのコントロールをビットマップに描画できます。これは、RichTextBoxやその他の一部では機能しません。
これら、またはそれらの1つを持つコントロールをキャプチャする場合は、このCodeProjectの記事で説明されているようにPInvokeを実行する必要があります。 Image Capture
これらのメソッドのいくつかは画面に表示されているものをすべてキャプチャすることに注意してください。そのため、コントロールをカバーする別のウィンドウがある場合は、代わりにそれを取得します。
これをサポートするWinFormsコントロールの場合、System.Windows.Forms.Controlクラスに次のメソッドがあります。
public void DrawToBitmap(Bitmap bitmap, Rectangle targetBounds);
ただし、これはすべてのコントロールで機能するわけではありません。サードパーティコンポーネントベンダーは、より包括的なソリューションを提供しています。
これは、クライアント領域(タイトルバーやその他のドレッシングがない)だけでなく、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);
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
注:正常に動作しています
実行しようとしているコントロール上にない場合は、通常、基本のControlクラスにキャストして、そこでDrawToBitmapメソッドを呼び出すことができます。