C#Alpha Blend透明PictureBox

时间:2009-05-27 22:45:16

标签: c# transparency alphablending

我的表单上显示了一个网络摄像头源,并希望在其上绘制。我打算用图片框来做这件事,我发现PictureBox不支持真正的透明度,而只是它所用的表格的颜色。它也不支持alphablending,这是我希望它显示的方式,类似于可以如何显示表单。

有谁知道怎么做?或者实施了可以执行此操作的控件?

3 个答案:

答案 0 :(得分:5)

Windows窗体中的透明度有点破碎。正如您所发现的,它并不真正支持重叠控件;它只是通过透明部分显示表单的背景颜色。使用一些Windows API魔术,您可以将许多控件显示为真正透明,并支持重叠,如this article by Bob Powell demonstrates。我已经能够使他的技术适用于标签和自定义控件,但我认为我已经尝试使其适用于PictureBox并且结果令人失望。一种解决方法是尝试创建一个手动绘制图像的自定义控件;我没试过。 Here's a forum post我演示了一个支持真正透明度的自定义控件(我在该论坛上的句柄是AtmaWeapon。)我的记忆似乎表明这对于自定义控件效果最好,因为微软的控件发生了一些明显的魔法。呈现。

或者,您可以使用WPF而不是WinForms来实现您的应用程序。 WPF的透明度适用于并支持重叠控件。这是您开发应用程序的一个相当大的转变,但它从一开始就有用。

答案 1 :(得分:1)

在大多数情况下,OwenP使用Bob Powell在此处演示的方法http://www.bobpowell.net/transcontrols.htm做到这一点的答案将有效。但是因为它是网络摄像头的直接绘图界面,所以实时馈送似乎总是位于其他控件之上。

为了解决这个问题,我做了一点作弊,并创建了一个二级形式,打开视频输入,没有边框,设置为始终在顶部,并给予透明度,我直接画到这个表格上。然后,我只需处理这个辅助表单中的一些事件,以便将注意力集中在原始表单上,并在另一个程序正在使用时进行处理。

答案 2 :(得分:0)

您可以将PictureBox放在另一个单独的表单上,并使用Windows样式类别中的窗体不透明度值。那会有用吗?