【发布时间】:2023-04-08 18:40:01
【问题描述】:
我想我一定遗漏了一些明显的东西,但是经过几个小时的搜索后我还是找不到。有没有办法使用 PictureBox 或其他控件来包含具有部分透明/alpha 混合像素的图像,并将其放置在另一个图像上并基于其下的图像进行混合?
例如,这会产生我想要的结果:
- 在表单上放置一个面板。
- 添加 OnPaint 处理程序。
- 在 OnPaint 处理程序中绘制 1 个 PNG,然后在其上绘制另一个 PNG,同时使用 Graphics.DrawImage。
这不是:
在表单上放置一个 PictureBox 并将其设置为 PNG。
在表单上放置另一个 PictureBox 并将其设置为 PNG。
将第二个图片框放在第一个上。
...即使第二个图片框是空的并且背景颜色为透明,它仍然会覆盖它下面的图片。
我读到这源于所有 winform 控件都是窗口,因此它们本质上是不透明的。
...但即使是我要迁移的 15 年前的平台,Borland 的 VCL,也有几个无窗口控件,所以很难想象 winform 至少没有一些简单的解决方案?
我上面的第一个示例是一个答案,没错,但是当您只能使用一个大面板并在其中绘制所有“控件”时,这会增加很多工作。如果您可以使用单独的鼠标事件/等进行单独的控件,那就更好了。即使不是图像控件,并且我必须自己绘制控件,也可以,只要我可以在每个控件中放置一个图像即可。在 VCL 中,他们将其称为“画框”,只是一个矩形区域,您可以将其放置在表单上并在其上绘制您想要的任何内容。有它自己的鼠标事件、Bounds 等。如果你没有在其中绘制任何东西,它就像它甚至不存在(100% 透明),除了它仍然获得鼠标事件的事实,所以可以用作“热点”或“目标”。
【问题讨论】:
标签: winforms user-interface png transparency