【问题标题】:C# Make a form's background transparent (to display .png background with half-transparent pixels)C# 使表单的背景透明(以半透明像素显示 .png 背景)
【发布时间】:2014-07-13 06:54:35
【问题描述】:

PNG 图像具有透明部分,我希望此图像作为我的表单的背景。
我已将ControlStyles.SupportsTransparentBackColor 设置为true 并使用this.BackColor = Color.Transparent; 但这根本不起作用,当我启动应用程序时,背景颜色显示为纯灰色。即使我在 Properties->Appearence 中将 BackColor 设置为 Transparent。我可以在表单设计预览中看到它是透明的,但是当我启动应用程序时它仍然显示为纯灰色。
使用TransparencyKey 也给了我一个不好的结果——PNG 图像的半透明像素变成了TransparencyKey 颜色,我不能为TransparencyKey 使用透明颜色。寻求帮助。
例子: http://i.stack.imgur.com/u9p6N.jpg

【问题讨论】:

  • iv'e 在问题中添加了图像,因此您可以使用 TransparencyKey 看到问题
  • 您需要逐像素的 Alpha 透明度,Winforms 不直接支持,因为它与工具箱中的许多控件不兼容。由 Windows 实现的那种,它们也变得透明。使用 WPF 窗口是合乎逻辑的方法。

标签: c# winforms background visual-studio-2013


【解决方案1】:

您可能错误地使用了TransparencyKey。此属性背后的想法是指定为TransparencyKey 的颜色将是透明的。例如。如果你设置myForm.TransparencyKey = Color.Red 任何红色的东西都是透明的。但是,如果红色的阴影与Color.Red 描述的不同,它就不会是透明的。

或者,换句话说,它会导致透明背景:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        this.BackColor = Color.FromArgb(100, 0, 0);
        this.TransparencyKey = Color.FromArgb(100, 0, 0);
    }
}

但这不会是透明的:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        this.BackColor = Color.FromArgb(99, 0, 0);
        this.TransparencyKey = Color.FromArgb(100, 0, 0);
    }
}

所以现在如果你的图像有白色背景并且你设置this.TransparencyKey = Color.White 只有图像的白色部分是透明的。但是,如果有任何灰白色的区域,您将看到这种颜色而不是透明背景。

如果是这种情况,您可能需要编辑图像以确保背景到处都是相同的颜色。

【讨论】:

    猜你喜欢
    • 2014-12-18
    • 1970-01-01
    • 2013-12-10
    • 2011-09-15
    • 2023-04-10
    • 1970-01-01
    • 2011-12-04
    • 1970-01-01
    • 2015-11-12
    相关资源
    最近更新 更多