Formに画像を表示する

Formに画像を表示する方法はいろいろあるのだが、一番簡単なのはFormの背景(Backgroundimage)にしてしまうことだ。

Form appを作る

  • Visual Studioを開き、New Projectを作る、名前は"DLLTestForm"

Formにドラッグ&ドロップを出来るようにする

  • Form1を開き、"Properties"をプロパティビューにして"AllowDrop"を"True"にする

Formにドラッグ&ドロップのイベントハンドラを実装

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);
}

ファイルの画像を背景に貼り付ける


Image imgFromFile = Image.FromFile(stringFilename[0]);
this.BackgroundImage = imgFromFile;


さてこの方法だと何がよろしくないかというと、読み込んだ画像を加工して表示するのが厄介なことだ。
画像を加工するのに一番手っ取り早いのは、Bitmapオブジェクトにしてしまうことだ。
ついでに、Paintのイベントハンドラを実装して、Formの再描画をしたらFormのGraphicsオブジェトを利用して画像の表示を更新できるようにしよう。

Formのメンバー関数にBitmapオブジェクトを追加する。


Bitmap m_bmpFromFile;

"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"を以下のように実装


private void onPaint(object sender, PaintEventArgs e)
{
if (m_bmpFromFile != null)
{
e.Graphics.DrawImage(m_bmpFromFile, 0, 0, m_bmpFromFile.Width, m_bmpFromFile.Height);
}
}
m_bmpFromFileの初期化を忘れると、onPaintがクラッシュするので、くれぐれも注意。