Formに画像を表示する方法はいろいろあるのだが、一番簡単なのはFormの背景(Backgroundimage)にしてしまうことだ。
Form appを作る
- Visual Studioを開き、New Projectを作る、名前は"DLLTestForm"
Formにドラッグ&ドロップを出来るようにする
- Form1を開き、"Properties"をプロパティビューにして"AllowDrop"を"True"にする
Formにドラッグ&ドロップのイベントハンドラを実装
- "Properties"をイベントビューにして"DragEnter"と"DragDrop"のイベントハンドラを作る、名前はそれぞれ"onDragEneter"、"onDragDrop"
- 上記のイベントハンドラを以下のように実装
private void onDragEnter(object sender, DragEventArgs e) { if ( e.Data.GetDataPresent( DataFormats.FileDrop ) ) e.Effect = DragDropEffects.All; else e.Effect = DragDropEffects.None; } private void onDragDrop(object sender, DragEventArgs e) { string[] stringFilename = (string[]) e.Data.GetData(DataFormats.FileDrop, false); }
ファイルの画像を背景に貼り付ける
- "onDragDrop"イベントハンドラに以下を追加する
Image imgFromFile = Image.FromFile(stringFilename[0]);
this.BackgroundImage = imgFromFile;
さてこの方法だと何がよろしくないかというと、読み込んだ画像を加工して表示するのが厄介なことだ。
画像を加工するのに一番手っ取り早いのは、Bitmapオブジェクトにしてしまうことだ。
ついでに、Paintのイベントハンドラを実装して、Formの再描画をしたらFormのGraphicsオブジェトを利用して画像の表示を更新できるようにしよう。
"onDragDropを以下のように変更する
private void onDragDrop(object sender, DragEventArgs e) { string[] stringFilename = (string[])e.Data.GetData(DataFormats.FileDrop, false); // m_bmpFromFile = new Bitmap(stringFilename[0]); Invalidate(); }
FormのPaintイベントハンドラを実装する
- Form1の、"Properties"イベントビューで、"Paint"のイベントハンドラを作る、名前は"onPaint"
- "onPaint"を以下のように実装
m_bmpFromFileの初期化を忘れると、onPaintがクラッシュするので、くれぐれも注意。
private void onPaint(object sender, PaintEventArgs e)
{
if (m_bmpFromFile != null)
{
e.Graphics.DrawImage(m_bmpFromFile, 0, 0, m_bmpFromFile.Width, m_bmpFromFile.Height);
}
}