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


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


PictureBox に画像を重ね合わせる



    ' パラメータは、画像イメージと配置する 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()

        ' ピクチャボックスのクリア

        ' 上記では、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


コメントは 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();

        // ピクチャボックスのクリア

        //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 イベントの呼び出しはフレームワークにお任せしています。


private void pictureBox1_Paint(object sender, PaintEventArgs e)
    // 画像を描画する
    e.Graphics.DrawImage(Properties.Resources.image1, new Point(0, 0));


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>