在WinForms UI(.NET3.5)中淡出透明图像

时间:2009-06-06 22:51:17

标签: c# winforms image transparency fadeout

应用程序: 我正在写一个小游戏,教会用户阅读音乐笔记。游戏很简单。该应用程序显示一个注释,我的小女儿(目标用户)应该点击与该注释匹配的WinForm GUI上的模拟键盘键。她有1分钟可以获得尽可能多的好点击。计算成功和失败。

任务: 当她点击一个好/坏的键盘键时,我想立即确认她是对还是错而不中断播放。我的计划是显示一个OK或FAILED位图逐渐淡出并在~2秒内变得完全透明。将位图淡出是一种很好的方法,可以鼓励用户专注于下一个音符而不再烦扰先前的结果。

技术问题: 如何在具有透明度的Windows窗体上显示位图?或者您是否有其他非侵入性,易于实现的想法让用户知道当前的好/坏选择?

2 个答案:

答案 0 :(得分:7)

正如dylantblack所说,WPF为您提供了更好的工具。如果您选择使用Windows窗体,这是一个简单的方法,使用计时器淡出图像。设置一个你喜欢的频率的计时器。启动计时器,每次增加alpha,并使用增加的alpha通道值绘制白色或任何表单颜色。

int alpha = 0;

...

private void timer1_Tick(object sender, EventArgs e)
{
    if (alpha++ < 255)
    {
        Image image = pictureBox1.Image;
        using (Graphics g = Graphics.FromImage(image))
        {
            Pen pen = new Pen(Color.FromArgb(alpha, 255, 255, 255), image.Width);
            g.DrawLine(pen, -1, -1, image.Width, image.Height);
            g.Save();
        }
        pictureBox1.Image = image;
    }
    else
    {
        timer1.Stop();
    }
}

答案 1 :(得分:3)

在WinForms中,您需要使用计时器或其他东西来设置OK或FAILED控件的不透明度,以使其淡出,或者使用GDI +手动绘制它。

如果您还在使用.NET 3.5,我建议使用WPF,这样做更容易。

例如,您可以查看Scott Hanselman's Baby Smash应用,它是开源的,并且具有类似于淡入淡出内容的概念。