.NET TIPS

Windowsフォームで簡単に画像を表示するには?

デジタルアドバンテージ
2003/04/25

 TIPS:画像を読み込むには?では、画像をファイルあるいはWebから読み込み、Bitmapオブジェクトを作成した。ここでは、そのBitmapオブジェクトに含まれるビットマップ・イメージを、Windows上でウィンドウを開いて表示してみる。

 Windowsフォーム上で画像を表示するには、いくつかの手段が用意されているが、まずはPictureBoxコントロールを使用する場合と、コントロールを使用せずにWindowsフォームに描画させる2つの簡単な方法を紹介する。

PictureBoxコントロールで画像を表示

 PictureBoxコントロールは、その名前からも分かるように、指定された画像を表示するためのコントロールだ。このコントロールをフォーム上に配置することにより、描画処理に関する一切をコントロールに任せることができ、プログラムでの画像の取り扱いが容易になる。

 ここではVisual Studio .NETを使用して、Web上の画像を表示するサンプル・プログラムを作成してみよう。まず、Visual Studio .NETを起動し、新しいプロジェクトとしてC#のWindowsアプリケーションを開く。そして次の画面のように、フォーム上にPictureBoxコントロールを配置する。

PictureBoxコントロールを配置したフォーム

 PictureBoxコントロールを配置する位置やサイズはプログラムから設定するので、ここでは適当でよい。次にフォーム上をダブルクリックし、次のコードを記述する。

private void Form1_Load(object sender, System.EventArgs e)
{
  string url =
    "http://www.atmarkit.co.jp/fdotnet/images/fdotnet_m.gif";
  WebClient wc = new WebClient();
  Stream stream = wc.OpenRead(url);
  Bitmap bitmap = new Bitmap(stream);
  stream.Close();

  pictureBox1.Image = bitmap;
  pictureBox1.Location = new Point(0, 0);
  pictureBox1.Size = bitmap.Size;

  this.ClientSize = bitmap.Size;
}
フォームをダブルクリックして追加するコード
このメソッドは、プログラムの開始時にウィンドウが表示される前に呼び出される。
(プログラムの先頭部分で「using System.IO;」と「using System.Net;」を追加する必要あり)

 Bitmapオブジェクトを作成するまでの手順は、TIPS:画像を読み込むには?で解説したとおりだ。このオブジェクトをPictureBoxコントロール(ここでは変数pictureBox1で参照されている)のImageプロパティに設定すれば画像が表示される。Imageプロパティには、Imageクラス(System.Drawing名前空間)のインスタンスを指定することになっているが、ImageクラスはBitmapクラスの親クラスであり、このような場合にはキャストなしで代入可能だ。

 なお、Webにアクセスするために使用しているWebClientクラスとStreamクラスは、それぞれSystem.Net名前空間とSystem.IO名前空間に属しているので、プログラムの先頭部分には次の2文を追加しておく必要がある。

using System.IO;
using System.Net;

 次にプログラムでは、PicutureBoxコントロールのLocationプロパティにより、コントロールの位置をフォーム内の左上隅に合わせている。さらに、SizeプロパティにBitmapオブジェクトのSizeプロパティを代入することにより、PictureBoxコントロールのサイズを画像のサイズと同じ大きさにしている。これらのSizeプロパティはSize構造体型であり、これはint型のHeight(高さ)とWidth(幅)が含まれている。

 同様に、フォームのサイズも画像に合わせる必要がある。これにはFormオブジェクト(正確には、Visual Studio .NETによりFormクラスを継承して自動生成されたForm1クラスのオブジェクト。コードでは“this”により参照している)のClientSizeプロパティを使用する。フォームのSizeプロパティではタイトル・バーなども含んだウィンドウ全体の大きさを設定してしまうので注意が必要だ。

 このサンプル・プログラムを実行すると次のようなウィンドウが表示される。

PictureBoxコントロールを使用したサンプル・プログラムの実行画面

BackgroundImageプロパティで画像を表示

 単に画像を表示するだけなら、コントロールを使用せずとも、フォームの背景イメージを設定するフォーム(System.Windows.Forms名前空間のFormクラス)のBackgroundImageプロパティを使用すればことが足りる。

 次のサンプル・プログラムは先ほどと同様に、Web上の画像を読み込み、ウィンドウに表示する。このプログラムもWindowsアプリケーションであるが、ここではVisual Studio .NETは使用せずに作成してみた。

// showbmp.cs

using System.IO;
using System.Net;
using System.Drawing;
using System.Windows.Forms;

class ShowBitmap {
  public static void Main() {

    string url =
      "http://www.atmarkit.co.jp/fdotnet/images/fdotnet_m.gif";
    WebClient wc = new WebClient();
    Stream stream = wc.OpenRead(url);
    Bitmap bitmap = new Bitmap(stream);
    stream.Close();

    Form form = new Form();
    form.BackgroundImage = bitmap;
    form.ClientSize = bitmap.Size;

    Application.Run(form);
  }
}

// コンパイル方法:csc /t:winexe showbmp.cs
フォームの背景イメージを利用して画像を表示するC#のサンプル・プログラム(showbmp.cs)

 コードの最後にあるApplicationクラス(System.Windows.Forms名前空間)のRunメソッドの呼び出しはWindowsアプリケーションには必須の処理だ。これはパラメータで指定されたフォームを表示し、Windowsアプリケーションの心臓部分ともいえる「メッセージ・ループ」の実行を開始する。蛇足ながら、この行を次のように書き換えれば、ウィンドウは正しく表示されるが、Windowsアプリケーションとしてはまったく機能しないことが分かるだろう。

form.Show();
System.Console.Read();

 以上2つのWindowsプログラムは、実際にプログラムを試していただければすぐ分かるのだが、リサイズしたときにその手抜き具合が露呈してしまう。対策としてはウィンドウをリサイズさせない、あるいは、ウィンドウのリサイズに合わせてビットマップ・イメージを拡大/縮小するなどの処理が考えられるが、ここでは割愛させていただく。End of Article

カテゴリ:クラス・ライブラリ 処理対象:ビットマップ
カテゴリ:Windowsフォーム 処理対象:PictureBoxコントロール
使用ライブラリ:Bitmapクラス(System.Drawing名前空間)
使用ライブラリ:Formクラス(System.Windows.Forms名前空間)
使用ライブラリ:Applicationクラス(System.Windows.Forms名前空間)
関連TIPS:画像を読み込むには?
 
この記事と関連性の高い別の.NET TIPS
PictureBoxコントロールにWeb画像を表示するには?
スクロールバー付きでPictureBoxコントロールに画像に表示するには?
Windowsフォームのボタンでテキストの前に画像を表示するには?
フォームやコントロールの画像をファイルに保存するには?
PictureBoxコントロールにグラフィックを描画するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム 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 記事ランキング

本日 月間