【问题标题】:Orange dots after transparency透明后的橙色点
【发布时间】:2014-08-13 14:57:05
【问题描述】:

我正在尝试创建一个窗口,该窗口有一个酷炫的火焰图标,并在其周围透明。我已经在这个网站上阅读了多个线程,说明我应该以特定的方式进行操作,并且我已经这样做了。但是我得到了一个非常非常奇怪的结果。

首先,它应该是这样的(请忽略 Photoshop 透明背景):

但它看起来像这样:

这是我使用的代码:

this.TransparencyKey = Color.Orange;
this.BackColor = Color.Brown;
InitializeComponent();

我希望有人可以帮助我:)

编辑: 如您所见,火焰周围有橙色像素化的东西(根据我放置的颜色而变化)

【问题讨论】:

    标签: c# winforms transparency


    【解决方案1】:

    您正在使用透明度键,这是一种全有或全无的解决方案:每个像素要么完全透明,要么完全不透明。这就是你得到这个结果的原因。

    您的表单需要 alpha 混合透明度。

    我发现 a couple articles 可能会有所帮助。

    【讨论】:

      【解决方案2】:

      TransparencyKey 不进行 Alpha 混合。它只是将单一颜色设置为完全透明;其余的完全不透明。网络上有许多教程如何与任意窗口形状进行正确的 alpha 混合,例如here.

      请注意,WPF 在这里使用起来要容易得多。如果窗口的背景是部分透明的,那么这就是你得到的。无需乱用 WinAPI 调用。

      【讨论】:

        【解决方案3】:

        10 年前我做过类似的事情。例如:

        但请注意,这不是半透明的,而是带有半透明背景的 alpha 透明。您的问题是您将透明度设置为单色并假设它将是 alpha 透明的。这就是为什么您会看到硬质像素。

        有很多方法可以创建这种效果,但有些方法太复杂了。以下是如何在 C++ 中执行此操作 (link)。如果您想知道这为何相关,那是因为您需要直接或间接使用 Windows API,并且它至少描述了您需要使用的内容。

        其他简单的方法是截取背景并绘制它,然后在其上绘制。请注意,如果窗口位于视频顶部以快速更改背景,则视觉外观可能会受到影响。

        【讨论】:

          猜你喜欢
          • 2017-03-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-09-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-10-04
          相关资源
          最近更新 更多