【发布时间】:2021-01-04 00:39:27
【问题描述】:
我的表单上显示了一个网络摄像头提要,并想在其上绘图。我打算使用图片框来做到这一点,我发现 PictureBox 不支持真正的透明度,而只是它所在表单的颜色。它也不支持字母混合,这是我希望它显示的方式,类似于表单的显示方式。
有人知道怎么做吗?或者已经实现了可以执行此操作的控件?
【问题讨论】:
标签: c# transparency alphablending
我的表单上显示了一个网络摄像头提要,并想在其上绘图。我打算使用图片框来做到这一点,我发现 PictureBox 不支持真正的透明度,而只是它所在表单的颜色。它也不支持字母混合,这是我希望它显示的方式,类似于表单的显示方式。
有人知道怎么做吗?或者已经实现了可以执行此操作的控件?
【问题讨论】:
标签: c# transparency alphablending
Windows 窗体中的透明度有点破损。正如您所发现的,它并不真正支持重叠控件。它只是通过透明部分显示表单的背景颜色。借助一些 Windows API 魔法,您可以使许多控件显示为真正透明并支持重叠,如 this article by Bob Powell demonstrates。我已经能够使他的技术适用于标签和自定义控件,但我想我已经尝试使它适用于PictureBox,但结果令人失望。一种解决方法是尝试创建一个手动绘制图像的自定义控件;我没试过。 Here's a forum post 在那里我演示了一个支持真正透明度的自定义控件(我在那个论坛上的句柄是 AtmaWeapon。)我的记忆似乎表明这对自定义控件最有效,因为 Microsoft 的控件在呈现时会发生一些明显的魔力。
或者,您可以使用 WPF 而不是 WinForms 来实现您的应用程序。 WPF 的透明度工作并支持重叠控件。这是您开发应用程序的一个相当大的转变,但它从一开始就有效。
【讨论】:
在大多数情况下,OwenP 使用 Bob Powell 在transcontrols 中演示的方法的答案将起作用。然而,因为它是一个直接绘制网络摄像头的界面,所以实时源似乎总是在其他控件之上。
为了解决这个问题,我做了一点小技巧,并创建了一个在视频源上打开的辅助表单——它没有边框,设置为始终在顶部,并且具有透明度——我直接在这个表单上绘图。然后我只需要在这个辅助表单中处理一些事件,以保持对原始表单的关注并在另一个程序正在使用时进行处理。
【讨论】:
您可以将 PictureBox 放在另一个单独的窗体上,并在 Windows 样式类别中使用窗体的不透明度值。这样行吗?
【讨论】: