.NET TIPS

フォームやコントロールの画像をファイルに保存するには?[2.0のみ、C#、VB]

デジタルアドバンテージ 遠藤 孝信
2006/06/02

 .NET Framework 2.0ではControlクラス(System.Windows.Forms名前空間)に「DrawToBitmapメソッド」が新しく追加されている。このメソッドを使えば、Windowsフォームで使用されるコントロールのイメージ(画像)をBitmapオブジェクトに描画できる。

 フォームも含め、Windowsアプリケーションで使用されるすべてのコントロールはControlクラスを継承して実装されているため、DrawToBitmapメソッドはすべてのコントロールに対して利用可能だ。従って、フォーム画面全体や、フォーム上の個々のコントロール単位にイメージをキャプチャでき、それを画像ファイルに保存することも簡単だ。

指定されたコントロールの画像をJPEGファイルとして保存するメソッド

 次のメソッドは、DrawToBitmapメソッドを利用して、指定されたコントロールのイメージをJPEGファイルとして保存するものだ。

void SaveControlImage(Control c, string file)
{
  int w = c.Size.Width; // コントロールの幅
  int h = c.Size.Height; // コントロールの高さ

  using (Bitmap bmp = new Bitmap(w, h)) {
    c.DrawToBitmap(bmp, new Rectangle(0, 0, w, h));
    bmp.Save(file, System.Drawing.Imaging.ImageFormat.Jpeg);
  }
}
Sub SaveControlImage(ByVal c As Control, ByVal file As String)
  Dim w As Integer = c.Size.Width ' コントロールの幅
  Dim h As Integer = c.Size.Height ' コントロールの高さ

  Using bmp As New Bitmap(w, h)
    c.DrawToBitmap(bmp, New Rectangle(0, 0, w, h))
    bmp.Save(file, System.Drawing.Imaging.ImageFormat.Jpeg)
  End Using
End Sub
指定されたコントロールをJPEGファイルとして保存するメソッド(上:C#、下:VB)

 このSaveControlImageメソッドでは、まず指定されたコントロールと同じサイズのBitmapオブジェクト(System.Drawing名前空間)を作成し、DrawToBitmapメソッドによりコントロール全体のイメージをそのBitmapオブジェクトに描画している。

 DrawToBitmapメソッドにはパラメータとして、Bitmapオブジェクトと、イメージを取得したいコントロール内の領域を示すRectangleオブジェクト(System.Drawing名前空間)を指定する。

 Bitmapオブジェクトに描画された内容をファイルとして保存する方法については「TIPS:画像をファイルに保存するには?」を参照していただきたい。

 次にこのSaveControlImageメソッドの利用方法について説明する。

フォームやコントロールの画像キャプチャ

 例えば、Visual Studio 2005でWindowsフォームにMonthCalendarコントロールとButtonコントロールを次の画面のように配置したとしよう。


2つのコントロールを配置したWindowsフォーム
MonthCalendarコントロールとButtonコントロールを配置している。

 ボタンをクリックしたときにフォーム全体と2つのコントロールの画像をそれぞれファイルに保存したい場合には、次のようにして先ほどのSaveControlImageメソッドを呼び出せばよい。以下のコードは配置したボタンをダブルクリックすると作成されるClickイベント・ハンドラに記述する。

private void button1_Click(object sender, EventArgs e)
{
  SaveControlImage(this, @"c:\form.jpg"); // フォーム全体
  SaveControlImage(button1, @"c:\button.jpg"); // ボタン
  SaveControlImage(monthCalendar1, @"c:\month.jpg"); // カレンダー
}
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  SaveControlImage(Me, "c:\form.jpg") ' フォーム全体
  SaveControlImage(Button1, "c:\button.jpg") ' ボタン
  SaveControlImage(MonthCalendar1, "c:\month.jpg") ' カレンダー
End Sub
Clickイベント・ハンドラに記述するコード(上:C#、下:VB)

 ここで「this」(VBでは「Me」)はフォームを参照している。

 このアプリケーションを実行し、ボタンをクリックすると次のような画像のJPEGファイルが作成される。

form.jpg

button.jpg

month.jpg

上記サンプル・コードにより作成される3つの画像ファイル

 なお、DrawToBitmapメソッドにはいくつかの制限がある。詳しくはクラス・ライブラリ・リファレンスの「Control.DrawToBitmap メソッド」を参照してほしい。End of Article

利用可能バージョン:.NET Framework 2.0のみ
カテゴリ:Windowsフォーム 処理対象:コントロール
使用ライブラリ:Controlコントロール(System.Windows.Forms名前空間)
使用ライブラリ:Bitmapクラス(System.Drawing名前空間)
関連TIPS:画像をファイルに保存するには?

この記事と関連性の高い別の.NET TIPS
Windowsフォームで簡単に画像を表示するには?
画像を読み込むには?
画像をファイルに保存するには?
Windowsフォームのボタンでテキストの前に画像を表示するには?
Windowsフォーム上のすべてのコントロールを列挙するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間