.Net コントロールの画像をプログラムで取得するにはどうすればよいですか?
7 に答える
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 2.0 以降では、Control クラスのDrawToBitmapメソッドを使用して、.NET コントロールの画像をプログラムで非常に簡単に取得できます。
これは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 を実行する必要があります:イメージ キャプチャ
これらのメソッドの中には、画面上にあるものをキャプチャするものがあることに注意してください。そのため、コントロールをカバーする別のウィンドウがある場合は、代わりにそれを取得します。
それをサポートする WinForms コントロールの場合、System.Windows.Forms.Control クラスにメソッドがあります。
public void DrawToBitmap(Bitmap bitmap, Rectangle targetBounds);
ただし、これはすべてのコントロールで機能するわけではありません。サード パーティのコンポーネント ベンダーは、より包括的なソリューションを提供しています。
実行しようとしているコントロール上にない場合は、通常、それを基本 Control クラスにキャストし、そこで DrawToBitmap メソッドを呼び出すことができます。
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
注:正常に動作しています