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