【问题标题】:c# overlay an image on top of another时间:2018-01-10 标签:c#overlay一个images on another
【发布时间】:2016-12-09 16:19:06
【问题描述】:

我目前正在尝试将注释放在五线谱图像之上。但是,注释背景被设置为如图所示的表单背景。 使用的图像类型是 png。

//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;

【问题讨论】:

  • 发布您拥有的任何代码,以便每个人都知道从哪里开始提供帮助
  • ok 添加代码
  • 代码看起来有点被截断,一般来说这很好,但在这种情况下,我需要更多的时间来获得更多的上下文,看看到底发生了什么。
  • 要透明,您的位图需要有一个 Alpha 通道。可以在构造函数中使用正确的 PixelFormat 或调用 MakeTransparent() 方法来创建它。
  • 您的问题解决了吗?

标签: c# png overlay


【解决方案1】:

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

为了使这具有透明度,您的笔记控件需要嵌套在谱表控件中!

由于它们不是,透明度显示了它们实际父级的颜色,即表单。

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-05
    • 1970-01-01
    • 2014-11-13
    • 1970-01-01
    • 2012-03-05
    • 1970-01-01
    • 2012-12-24
    相关资源
    最近更新 更多