32

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

4

7 に答える 7

49

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

Control c = new TextBox();
System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(c.Width, c.Height);
c.DrawToBitmap(bmp, c.ClientRectangle);
于 2008-11-05T18:27:34.777 に答える
7

.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)
于 2008-11-05T18:29:54.070 に答える
5

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

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

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

于 2008-11-05T18:39:58.403 に答える
3

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

public void DrawToBitmap(Bitmap bitmap, Rectangle targetBounds);

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

于 2008-11-05T18:28:09.907 に答える
1

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

于 2008-11-05T18:36:28.940 に答える
1
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

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

于 2011-06-09T13:37:44.690 に答える