【问题标题】:Winforms Transparency Issue (i going crazy with it)Winforms 透明度问题(我为之疯狂)
【发布时间】:2010-07-31 14:16:30
【问题描述】:

我会在下面给你看一张图片,但在那之前……

如果您看过 yahoo 小部件或卡通/主题 windows 媒体播放器皮肤..

我正在构建一个标题栏少...背景少...应用程序...它看起来像这样


(来源:deviantart.net

你看到的较暗的背景实际上是我的壁纸因为这是一个屏幕截图...

为了实现这一点.. 身体和线条的形状,我使用透明 PNG.. 然后我使用 Win Form 的透明度键使其透明.. 图像加载到图片框中...

我的问题是你在身体轮廓上看到的白点......这是因为那个PNG的像素不是完全不透明或透明的,即半透明......所以透明度键无法制作背景表单在这些像素处是透明的……你会看到这些白点……

很好 有没有其他方法可以使表单透明,因为...

  • transparency key 的行为总是这样,因为无论你做什么,在图像中的曲线处总会有这些半透明像素...

【问题讨论】:

  • 呃,我想我以前也尝试过这样做,但运气不佳。 Winforms、透明度键和 PNG 不能很好地结合在一起。 WPF 怎么样?
  • 那是什么...我在某处看到了缩写“WPF”
  • WPF 是一个完全不同的 GUI 框架,完全独立于 WinForms,与 WinForms 几乎没有共同之处。如果您已经熟悉 WinForms,则需要大量重新学习。
  • WPF = Windows Presentation Foundation:用于构建 Windows 客户端应用程序的新框架。如果您使用的是 .NET 3.5 及更高版本,您可能会查看 WPF,因为它支持窗口级别的透明度(您可以将 Form 的背景设置为透明,这会在 WinForms 中产生错误)。 WPF 广泛支持图形和非矩形形状的表单。检查链接:codeproject.com/KB/WPF/wpfpopup.aspx 如果您使用的是 .NET 3.5 或 4.0,您可能希望利用图形功能,因为您正在开发一个小部件样式的应用程序。希望对您有所帮助!

标签: c# winforms transparency photoshop


【解决方案1】:

你的问题是

  • PNG 已消除锯齿
  • 它与普通表单背景 (SystemColors.Control) 合成
  • 如果您使用 TransparencyKey 属性使其透明(使 single 颜色透明,但仅此而已),您最终会在 PNG 具有部分透明的地方出现不透明

到目前为止,完全符合预期。请记住:您不会在屏幕上绘制部分透明的 PNG;您将其绘制到表单上,然后获取最终结果并使单一颜色透明。尽管物有所值,但您的 PNG 可以将粉红色作为周围颜色,结果将是相同的。

您可能想要查看区域或不对您正在绘制的 PNG 进行反锯齿处理。

【讨论】:

  • 怎么不能抗锯齿...我试过了,但我无法在 photoshop 中做到这一点
【解决方案2】:

Johannes 提到了您当前方法的主要问题。

可以在 Windows 窗体中进行表单 alpha 混合,但您需要使用 Windows API 调用(以及其他):UpdateLayeredWindow

Visual C# kicks 有一个helpful tutorial and source code 说明如何执行此操作以创建具有专业外观的初始屏幕。

唯一的缺点是,如果您的表单包含按钮、文本框等子控件,它们将不会使用 UpdateLayeredWindow 进行绘制。但是,您仍然可以通过手动将它们绘制为表单背景的一部分来模拟按钮等。

【讨论】:

    猜你喜欢
    • 2011-10-11
    • 2010-11-23
    • 2010-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多