c#将图像叠加在另一个上面

时间:2016-12-09 00:38:46

标签: c# png overlay

我目前正在尝试将笔记放在员工形象之上。但是,音符背景被设置为图像背景所示的表单背景。 使用的图像类型是png。

enter image description here

//class music staff
  public MusicStaff(int xLoc, int yLoc, int xSize, int ySize)
        {
            this.SetBounds(xLoc, yLoc, xSize, ySize);
            this.Visible = true;
            ResourceManager rm = Resources.ResourceManager;

            Bitmap bmp = (Bitmap)rm.GetObject("Staff1");
            this.BackgroundImage = bmp;
            this.BackgroundImageLayout = ImageLayout.Stretch;
            this.BackColor = Color.White;
//adding the background pic
   panel4 = new MusicStaff(3, 62, 927, 150);

//adding a note
 MusicNote p = new MusicNote(pitch, duration, shape, s);

            p.SizeMode = PictureBoxSizeMode.StretchImage;
            p.BackColor = Color.Transparent;
            p.Size = new Size(50, 75);
 p.Location = new Point(xCounter + starterX, NoteLocations.c0.mainPoint);
                        Bitmap myImage = (Bitmap)rm.GetObject(shape);
                        p.Image = myImage;

1 个答案:

答案 0 :(得分:1)

你并没有真正覆盖图像。您正在用图像覆盖控件。

为了使用透明度,您的笔记控件需要在人员控件中嵌套

因为它们不是,透明度显示其实际的颜色,即表单。

设置p.Parent=panel4并相应地调整位置,即使它们相对于工作人员..

这是winforms透明度的限制,它不支持重叠控件。 嵌套控件可以正常工作,但只能通过伪造透明部分来复制它们。

请注意,因此您将无法让这些音符相互重叠或被任何其他控件重叠。

经常放弃使用控件是更好的方法;相反,人们可以简单地绘制构成总数的所有部分..

因此,您可以在e.Graphics.DrawImage(noteImg, x, y)事件中执行一系列panel4_Paint