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