PictureBox 위에 여러 이미지 겹쳐서 표현하기

안녕하세요.

제가 pictureBox 위에 여러 개의 이미지를 겹쳐서 표현하고 싶은데

Transparent를 사용한다는 건 알고 있는데 어떤 식으로 표현해야할 지 모르겠어서 글 올립니다.

    picturebox1.BackColor = Color.Transparent;
    picturebox1.Parent = this;        

    private void btn_1_Click(object sender, EventArgs e)
    {
        this.picturebox1.Image = Properties.Resources.test_1;
    }

    private void btn_2_Click(object sender, EventArgs e)
    {
        this.picturebox1.Image = Properties.Resources.test_2;
    }
1개의 좋아요

윈폼 이신가요?

간단하게 처리 하시려면 두가지 방법이 있습니다.

방법1

말씀하신 것 처럼 투명한 pictureBox를 위에 오버레이 하는 방법

// pictureBox2를 pictureBox1에 추가하고 배경을 투명하게 설정 합니다.
this.pictureBox1.Controls.Add(this.pictureBox2);  
this.pictureBox2.Location = new Point(0, 0);
this.pictureBox2.BackColor = Color.Transparent;

결과
image

방법2

기존 pictureBox 에 이미지를 다시 그릴 수 있습니다.

private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
            Graphics g = e.Graphics;
            g.DrawImage(this.imageList1.Images[0],
                50,
                50,
                150,
                150);
}

결과
image

4개의 좋아요

감사합니다.

방법1을 사용하여 이미지 두개 겹치기는 확인하였습니다.

혹시 방법1을 사용 했을 때 picturebox1에 picturebox2, 3, 4, 5, 6 등등 여러개의 picturebox를 추가하려면 어떻게 해야하죠…?

1개의 좋아요

이미지를 1개 올려 겹치나
2개, 3개, n개 올려 겹치나 방법이 다를건 없습니다.
그냥 똑같이 처리 하시면 됩니다.

this.pictureBox1.Controls.Add(this.pictureBox3);
this.pictureBox1.Controls.Add(this.pictureBox2);

this.pictureBox2.Location = new Point(0, 0);
this.pictureBox2.BackColor = Color.Transparent;

this.pictureBox3.Location = new Point(90, 10);
this.pictureBox3.BackColor = Color.Transparent;
1개의 좋아요
 private void btn_1_Click(object sender, EventArgs e)
    {
        this.picturebox1.Controls.Add(this.picturebox2);
        this.picturebox2.Location = new Point(0, 0);
        this.picturebox2.BackColor = Color.Transparent;
    }

    private void btn_2_Click(object sender, EventArgs e)
    {
        this.pibcturebox1.Controls.Add(this.picturebox3);
        this.picturebox3.Location = new Point(0, 0);
        this.picturebox3.BackColor = Color.Transparent;
    }

    private void btn_3_Click(object sender, EventArgs e)
    {
        this.picturebox1.Controls.Add(this.picturebox4);
        this.picturebox4.Location = new Point(0, 0);
        this.picturebox4.BackColor = Color.Transparent;
    }

    private void btn_4_Click(object sender, EventArgs e)
    {
        this.picturebox1.Controls.Add(this.picturebox5);
        this.picturebox5.Location = new Point(0, 0);
        this.picturebox5.BackColor = Color.Transparent;
    }

답변 감사합니다.

저는 지금 버튼을 클릭하면 각 해당하는 picturebox2, 3, 4, 5를 picturebox1에 추가하고 있는데

위에 코드로 실행하면 겹쳐서 표현이 되지 않네요… 혹시 문제가 있는 부분이 있을까요 ??

1개의 좋아요

같은 위치에 Add되고

이미지 크기 또한 같다면 겹쳐지더래도 가장 마지막에 추가된 하나의 이미지만 보이겠죠

자세한 확인은 이미지를 포함한 전체 소스코드를 올려주시면 다른 분들도 도움을 주실 것 같습니다.

1개의 좋아요
private void btn_2_Click(object sender, EventArgs e)
{
    this.pibcturebox1.Controls.Add(this.picturebox3);
    this.picturebox3.Location = new Point(0, 0);
    this.picturebox3.BackColor = Color.Transparent;
}

오타 : this.pibcturebox1.Controls.Add(this.picturebox3);

정상 : this.picturebox1.Controls.Add(this.picturebox3);

혹시나 오타 때문에 그런거 아닐까요?

1개의 좋아요