【问题标题】:Transparent PNG In Picture Box透明PNG图片框
【发布时间】:2014-01-05 16:43:58
【问题描述】:

我在这里有点困惑。在 C# 中,我的表单具有透明背景,表单上有一个图片框。图片框有一个带有很多透明区域的PNG图像,这很清楚,因为我在photoshop中查看过......透明度就在那里!

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

现在,该图像看起来像是在尝试对某些部分进行透明处理,但它生成的图像看起来有可怕的斑点。

我需要用一张图来解释:

在左边你可以看到我已经将表单背景设置为蓝色,并且没有设置透明键。顶部的界面PNG具有界面元素之间的透明度,甚至界面半透明背景都可以使用!通过图片可以看到表单背景。

但是,在右侧图像上,我已将表单透明度键设置为与背景颜色相同...它使所有表单透明,但似乎忽略了 PNG 上界面项之间的透明部分...使其看起来像表单背景颜色仍在图片框下方并形成可怕的锯齿状边缘。

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

我希望这是有道理的。

我后来发现只有在 png 的某些部分有阴影时才会发生这种情况?

【问题讨论】:

标签: c# image background transparency dropshadow


【解决方案1】:

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

有一个很好的示例项目here

【讨论】:

  • 您确定没有更简单的解决方案吗?我不明白为什么它不按应有的方式渲染 PNG。我什至尝试在透明表单上使用图片框中的图像,但它有同样的问题
  • 不幸的是,我敢肯定。问题是 GDI 技术的最后一次更新是在 Windows XP 发布时——在 png 成为广泛使用的 GUI 格式之前。 WPF 应该支持半透明窗口,但只要您使用 WinForms(和 GDI,在一定程度上),您唯一的选择就是选择一种透明颜色或使用位掩码。
猜你喜欢
  • 2013-07-17
  • 2018-01-13
  • 2011-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-08
相关资源
最近更新 更多