【问题标题】:Semi Transparent PNG as Splash Screen半透明PNG作为启动画面
【发布时间】:2012-03-28 20:14:09
【问题描述】:

我正在尝试使 Splash Screen 4 成为 Win 应用程序。

我的设置:

表单边框样式设置为无。起始位置是屏幕中心。 表单的背景图片设置为 PNG 文件,带有圆角边缘和“内置”投影。

在我设置的代码中:

this.SetStyle( ControlStyles.AllPaintingInWmPaint, true);
this.SetStyle( ControlStyles.UserPaint, true);
this.SetStyle( ControlStyles.DoubleBuffer, true);
this.SetStyle( ControlStyles.SupportsTransparentBackColor, true);

this.AllowTransparency = true;
this.BackColor = Color.Transparent;

但是当我测试时,它说表单不能有透明的背景颜色。

我不想设置透明键,因为它会导致 dropschadow(png 的半透明部分)出现问题

我也不想将不透明度设置为 0%,因为它也会影响我的 PNG。

事实上,我只希望我的 png 显示为窗口。另外,它上面还会有一些动态文本,将来还会有一个进程栏......

有什么想法吗?如何判断表单是否有透明背景就像 ADOBE PHOTOSHOP CS5 的启动画面

【问题讨论】:

  • 您所要求的内容在您通过 Project -> Add -> New Form 单击的默认表单中不可用。您需要做的是扩展默认功能。您已经在发布的代码中获得了一些先机——这就是您将添加到扩展表单类(或它的一些修改版本)中的内容。您要添加的其他内容是自定义区域,以定义您的表单形状。忘了怎么做透明度。想出一些资源链接。
  • 资源链接:stackoverflow.com/questions/5092216/…stackoverflow.com/questions/1592876/…。但不确定您的透明度,因为您不想使用透明度密钥。
  • 老实说,为了避免使用透明键的替代方法可能带来的麻烦和复杂性,您不妨编辑掉 PNG 的边框(只需在 Microsoft Paint 上擦除这些像素,或使用魔术棒选择Photoshop 中启动屏幕的其余部分,反转选择并删除边框)并自己重新绘制。
  • 首先,我对 c# 几乎是新手,所以我不明白 X__X 我不明白你编辑 png 的意思。 splashscreen.png -> acid.chdustar.com/mpx2%20splash.png 以及扩展表单类是什么意思?
  • 我不知道从哪里开始。没有任何方法可以隐藏窗口,但将 png 保留为任何包装器等的子级?我还看到了一个名为 splash() 的方法或类似的东西……但我真的不记得了。你有任何资源或代码要处理吗?我已经用谷歌搜索了几个小时,但我找不到对我有帮助的东西。

标签: c# background png transparent splash-screen


【解决方案1】:

我也花了几个小时在 Win Forms 中寻找一种方法,所以我想我会分享我的解决方案。

我的初始屏幕图像是一个 .png,具有透明背景和在透明背景上延伸的各种阴影。使用不常见的颜色作为控件的背景以及透明度键会在半透明阴影下方留下难看的补丁。

通过将表单的背景图像设置为我想要显示的图像并覆盖 OnPaintBackground 函数,我能够获得所需的结果,如下所示:

    bool painted = false
    protected override void OnPaintBackground(System.Windows.Forms.PaintEventArgs e)
    {
        if (painted) return;
        e.Graphics.DrawImage(BackgroundImage, new System.Drawing.Point(0, 0));
        painted = true;
    }

我只是碰到这个旧线程,因为它是我尝试的几个不同关键字组合的最高 Google 结果。

另请参阅Transparent Splash Screen,这是我从另一个 SO 帖子中找到此解决方案的地方。

【讨论】:

  • 我试过这个,但它的绘画图像相比之下非常大......图像位置也错位了,就像我让它拉伸但它仍然以另一种方式显示。我也无法设置透明颜色。
  • 您可能需要调整图像大小。我将表单的 ClientSize 设置为与图像相同的大小。表单上的唯一控件是包含图像的 PictureBox。
  • 真的工作,因为后面的图像没有改变。它类似于“获取背景位图”的答案。
【解决方案2】:

这是一个 WPF 初始屏幕的简单示例。这一切都在 XAML 中。我没有写一行 C# 来让它工作。

<Window x:Class="WpfSplashScreen.SplashScreen"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        WindowStyle="None" Background="Transparent" AllowsTransparency="True"
        ShowInTaskbar="False" SizeToContent="WidthAndHeight"
        WindowStartupLocation="CenterScreen">
    <Image Source="logo.png" Stretch="None" />
</Window>

这只是一个示例,需要更多代码才能使其有用,但这就是 WPF 中启动屏幕的简单程度。

【讨论】:

  • thx 4 你的代码,我已经开始了我的启动画面项目,它看起来与你的示例几乎相似,但正如你所说,非常复杂;)无论如何,WPF 是我的解决方案,我很高兴我现在知道 WPF。 ^^
猜你喜欢
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
  • 2014-05-10
  • 2010-12-13
  • 1970-01-01
  • 2011-01-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多