Visual StudioのC#やVisualBasicで画像を扱うのに便利なツールがPictureBoxです。
ここではPictureBoxの使い方を紹介していきます。
PictureBoxとは?
画像の表示のために用意されています。
bmp、PNG、JPEGなどの画像ファイルをロードするだけでなく、回転したりサイズにアジャストさせて表示させることができます。
保存ルーチンもあるので、PictureBox上で加工してそれをファイルに出力するというときにも便利です。
PictureBoxの使い方
画像ファイルを表示する
ツールボックスのPictureBoxを選んでフォーム上にドラッグして配置します。
配置したPictureBoxのプロパティでImageが画像データとなります。
Imageプロパティで「...」を選ぶとリソース選択が出てきます。
「ローカルリソース>インポート」でダイアログから画像を選択します。
JPEGやGIF、PNG、BMPなどに対応しています。
これでPictureBox内に画像が表示されました。
動画を表示する
OpenCV、aForgeなどのライブラリを使えば動画をC#で取り扱うことができます。
動画の表示部分としてPictureBoxを使うこともできます。
詳しくは以下参照ください。
画像をフィットさせる
画像を指定しただけでは、元のサイズのままです。
SizeModeプロパティを「StretchImage」にすると、...
配置したPictureBoxのサイズにあわせて画像を表示します。
サイズはそのままで中心部から画像を置くには「CenterImage」にセットします。
縦横比率をキープした状態でPictureBoxにあわせるには「Zoom」を選びます。
プログラミング
画像を表示する
「ImageLocation 」というプロパティを使うと、表示させる画像ファイルの場所を指定できます。
ボタンを押すとPictureBoxに画像を表示するプログラムを書くには、
private void Button1_Click(object sender, EventArgs e)
{
pictureBox1.ImageLocation = @"C:\_work/face1.bmp";
}
のように書きます。「C:\_work/face1.bmp」が画像のパスです。
成功すると、このように画像ファイルがPictureBoxとして設定した場所に表示されるはずです。
読み込んだ画像をPictureBoxに描画
「ImageLocation 」を使うと、その画像だけが描画されます。
いろんな画像をロードして自由な場所に転送して描くには、ビットマップとしてメモリ上に読み込んで、それを「DrawImage」で描画する方法があります。
Bitmap canvas = new Bitmap(pictureBox1.Width, pictureBox1.Height);
Graphics g = Graphics.FromImage(canvas);Bitmap bitmap = new Bitmap("_green.png");
g.DrawImage(bitmap, 0, 0, bitmap.Width, bitmap.Height);
g.Dispose();
pictureBox1.Image = canvas;
読み込んだ画像の背景を透過
読み込んだビットマップで「MakeTransparent」で透過色を設定すると、背景を透過させた状態で表示できます。
Bitmap bitmap = new Bitmap("_green.png");
Color keyColor = Color.FromArgb(255, 255, 255);
bitmap.MakeTransparent(keyColor);
読み込んだ画像を回転や移動して描画
グラフィックスを変換してから描画します。
回転なら「RotateTransform」、移動なら「TranslateTransform」、スケールなら「ScaleTransform」を使います。
Bitmap bitmap = new Bitmap("_green.png");
Graphics g = Graphics.FromImage(canvas);
g.RotateTransform(45);
g.TranslateTransform(100, 0);
g.DrawImage(bitmap, 0, 0, bitmap.Width, bitmap.Height);
画像の回転、反転
Bitmapオブジェクトは回転や反転用の機能もがあります。
Bitmap bmp = new Bitmap("sample.bmp");
bmp.RotateFlip(RotateFlipType.Rotate180FlipX);
PictureBox1.Image = bmp;
指定するときに「RotateNoneFlipY」なら垂直反転、「Rotate180FlipNone」なら180度回転で反転はナシとなります。
画像を保存する
PictureBoxでハンドリングするImageオブジェクトの書き出し機能を利用します。
PNG形式での書き出しはこのようになります。
String filename="test.png";
PictureBox1.Image.Save(filename, System.Drawing.Imaging.ImageFormat.Png);