gpt4 book ai didi

Winforms半透明PNG超过半透明PNG

转载 作者:行者123 更新时间:2023-12-01 00:29:14 28 4
gpt4 key购买 nike

我想我一定遗漏了一些明显的东西,但经过几个小时的搜索我还是找不到它。有没有办法使用 PictureBox 或其他控件来包含具有部分透明/alpha 混合像素的图像,并将其放置在另一个图像上并让混合基于它下面的图像?

例如,这会产生我想要的结果:

  1. 在表单上放置一个面板。
  2. 添加 OnPaint 处理程序。
  3. 在 OnPaint 处理程序中绘制 1 个 PNG,然后在其上绘制另一个 PNG,两者都使用 Graphics.DrawImage。

这不是:

  1. 在窗体上放置一个 PictureBox 并将其设置为 PNG。

  2. 在窗体上放置另一个 PictureBox 并将其设置为 PNG。

  3. 将第二个图片框放在第一个图片框上。

...即使第二个图片框是空的并且背景颜色为透明,它仍然会覆盖下面的图片。

我读到这源于所有 winform 控件都是窗口,因此它们本质上不是透明的。

...但即使是我从 15 年前迁移过来的平台,Borland 的 VCL,也有几个无窗口控件,所以很难想象 winforms 至少没有一些简单的解决方案?

我上面的第一个例子是一个答案,没错,但是当您只能使用一个大面板并在其中绘制所有“控件”时,这会增加很多工作。如果您可以使用单独的鼠标事件/等进行单独的控制,那就更好了。就算不是图片控件,自己画的控件也行,只要每个控件放一张图片就可以了。在 VCL 中,他们将其称为“绘画框”,它只是一个矩形区域,您可以将其放置在窗体上并在其上绘制您想要的任何内容。它有自己的鼠标事件、边界等。如果你不在其中绘制任何东西,就像它甚至不存在(100% 透明)除了它仍然有鼠标事件,所以可以用作“热点”或“目标”。

最佳答案

PictureBox 控件对透明度的支持很好,只需将其BackColor 属性设置为Transparent 即可。这将使它的父级的像素作为背景可见。

问题是设计者不会让您将第二个图片框作为第一个图片框的子图片框。您所需要的只是构造函数中的一小部分代码来重新设置它的父级。并给它一个新的位置,因为它是相对于父级的。像这样:

    public Form1() {
InitializeComponent();
pictureBox1.Controls.Add(pictureBox2);
pictureBox2.Location = new Point(0, 0);
pictureBox2.BackColor = Color.Transparent;
}

顺便说一下,不要犹豫使用 OnPaint()。

关于Winforms半透明PNG超过半透明PNG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10455484/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com