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