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