2014-01-05 76 views
1

我在这里有点困惑。在C#中,我的表单具有透明背景,窗体上有一个图片框。该picturebox有一个很多透明区域的PNG图像,这是明确的,因为我看着在Photoshop中...透明度在那里!透明PNG图片框

但是,当我运行我的应用程序的PNG图像是由于某种原因忽略了透明部分?有任何想法吗?

现在图像看起来像是试图做一些部分的透明度,但它做了一个可怕的斑点图像。

我需要用图片来说明这一点:

enter image description here

在左边你可以看到我有设置窗体背景的蓝色,并设置不transparancy关键。在界面元素之间的透明度,甚至是界面半透明背景之间的透明度,界面PNG的作品!您可以通过图像查看表单背景。

但是,在正确的图像我已经设置窗体透明度键与背景颜色相同...它使所有的形式透明,但它似乎忽略了接口项之间的透明部分PNG ...使它看起来像表单背景颜色仍然在图片框下方,并使这个可怕的参差不齐的边缘。

因此,如果PNG的工作表单不透明,为什么它不隐藏PNG下的表单的其余部分?我在这里应该看到的是通过PNG界面元素和半透明部分展示的桌面......但我所看到的只是我在表单上设置的颜色!

我希望这是有道理的。

我自那以后才发现它只发生在PNG部分有阴影?

+1

答案(S)在这里可能会帮助http://stackoverflow.com/questions/4144371/a-picturebox-problem – keyboardP

+0

我编辑了自己的冠军。请参阅:“[应该在其标题中包含”标签“](http://meta.stackexchange.com/questions/19190/)”,其中的共识是“不,他们不应该”。 –

+0

好的感谢编辑它......真的有点愚蠢的规则? – Glen

回答

0

发生这种情况,因为如您所说,您正在使用阴影。透明度键的作用是在绘制表格后移除您从显示器中指定的确切颜色,因此当阴影与背景混合在一起时,会创建一种不透明的新颜色。你可以通过使用一些API调用,并创建一个每像素掩码(基本上是一个灰度位图,告诉每个像素透明度应该是什么)来绕过这个。

有一个很好的例子项目here

+0

你确定没有更简单的解决方案吗?我不明白为什么它不会像应该那样渲染PNG。我甚至尝试在透明窗体上的图片框中使用图像,但它有相同的问题 – Glen

+0

不幸的是,我确定。问题在于GDI技术最后一次更新时,是在Windows XP的发布 - 在png成为GUI广泛使用的格式之前。 WPF应该支持半透明的窗口,但只要你使用WinForms(和GDI,按范围),你唯一的选择就是选择一种透明的颜色或者使用一个位掩码。 –