[ VB.NET / C# ] PictureBox に画像を重ね合わせる ( Graphics.DrawImage )

Pocket

C# と VB.NET のフォームに配置した PictureBox に画像を重ねて配置するサンプルコードを掲載しています。また、画像のクリアを行うサンプルコードも合わせて掲載しています。なお、動作確認は VS2015 で行っています。

スポンサーリンク


PictureBox に画像を重ね合わせる

画像を重ね合わせて表示するサンプルコードです。なお、本サンプルでは画像をリソースから取得していますが、ファイルシステム上のファイルでも問題ありません。サンプル内のコメントも参照ください。

VB.NET

    ' パラメータは、画像イメージと配置する XY 座標
    Private Sub DrawImage(ByVal prm_img As Image,
                          ByVal x As Integer, ByVal y As Integer)

        ' グラフィック用オブジェクトを生成
        Dim gr As Graphics = PictureBox1.CreateGraphics()

        ' 画像の描画
        gr.DrawImage(prm_img, New Point(x, y))

    End Sub

    ' PictureBox の画像をクリアする(PictureBoxの背景色で塗りつぶす)
    Private Sub ClearImage()

        Dim gr As Graphics = PictureBox1.CreateGraphics()

        ' ピクチャボックスのクリア
        gr.Clear(PictureBox1.BackColor)

        ' 上記では、PictureBox の背景色で塗りつぶしているが、
        ' デフォルトの画像を設定すると上から上書きされる
        'PictureBox1.BackgroundImage = My.Resources.back_image;
        'PictureBox1.Image = My.Resources.default_iamge

    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim img1 As Bitmap = My.Resources.image1
        Dim img2 As Bitmap = My.Resources.image2
        
        ' 画像を PictureBox に表示する
        ' 後ろの画像から手前の画像の順に配置する
        DrawImage(img1, 0, 0)
        DrawImage(img2, 20, 20)

    End Sub

C#

コメントは VB.NET のサンプルで確認してください。

    private void DrawImage(Image prm_img, int x, int y)
    {
        // グラフィック用オブジェクトを生成
        Graphics gr = pictureBox1.CreateGraphics();

        // 画像の描画
        gr.DrawImage(prm_img, new Point(x, y));
    }

    private void ClearImage()
    {
        Graphics gr = pictureBox1.CreateGraphics();

        // ピクチャボックスのクリア
        gr.Clear(pictureBox1.BackColor);

        //pictureBox1.BackgroundImage = Properties.Resources.back_image;
        //pictureBox1.Image = Properties.Resources.default_image;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Bitmap img1 = Properties.Resources.image1;
        Bitmap img2 = Properties.Resources.image2;

        DrawImage(img1, 0, 0);
        DrawImage(img2, 20, 20);
    }

Form.Load イベントでは修正できない

注意点として、Form.Load や Form.Shown イベントでは、Graphics.DrawImage で更新した内容が反映されることはありません。フォームロード時に処理はできないため、その代替案として PictureBox コントロールの Paint イベントで描画する方法があります。なお、下記では Paint イベントの呼び出しはフレームワークにお任せしています。

C#

private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
    // 画像を描画する
    e.Graphics.DrawImage(Properties.Resources.image1, new Point(0, 0));
}
スポンサーリンク

Pocket

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>