从黑屏淡入显示图片?

已加入
2019年7月4日
留言内容
10
编程经验
10+
我用全屏的Picturebox制作了一个表格,效果很好!

我通过单击图片再次停止它-效果也很好!

现在我需要让图片从黑屏淡入...如何在C#中做到这一点?

我从那里得到了很多东西,它们叫Unity……不知道它是什么-我想要用C#。
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,580
地点
弗吉尼亚州切萨皮克
编程经验
10+
您必须使用图像的Alpha通道。范围从0使图像透明,到255使图像不透明。假设图片后面的背景为黑色,则当图片为透明时,它将显示为黑色,然后随着alpha接近255逐渐将图片重新带入。

如果您正在玩没有alpha的位图,那么做事的困难方法是计算每个像素的亮度,然后乘以亮度因子。将该亮度从0.0调整为1.0。

您可能会利用颜色矩阵。看 如何:使用颜色矩阵来转换单色。与其使用RGB颜色,不如使用Alpha。
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,969
地点
英国
编程经验
10+
如果是表格和全屏显示?您可以使用窗体的不透明度作为淡入淡出机制,并在Windows计时器上运行它。您将需要一个计时器,并使用该计时器将计时器设置为每隔毫秒进行一次滴答,并且每隔一个滴答,您会将表格的不透明度从其当前不透明度值降低3或5倍,最终该表格将淡出图像。如果您不希望整个窗体淡出,而只淡化图像,也可以执行类似的操作,但是您需要遵循上面发布的内容。
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,580
地点
弗吉尼亚州切萨皮克
编程经验
10+
表单的不透明度是整个窗口的Alpha通道。好主意。
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,969
地点
英国
编程经验
10+
还有另一种方法,类似于您的发布方式,但是让我们看看OP希望首先使用哪种方法。如果我了解OP想要做什么,那么对他/她来说,我在#3上的路显然是更好的选择。
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,969
地点
英国
编程经验
10+
你是怎么做的 @ksor ?如果您与其他读者共享您的代码和解决方案,将很有帮助。
 
已加入
2019年7月4日
留言内容
10
编程经验
10+
我用了"Opacity -Timer"方法,这是我的表单代码:

public partial class Form1 : Form { public Form1() { InitializeComponent(); this.Opacity=0; this.timer1.Enabled=true; } private void Form1_Load(object sender, EventArgs e) { this.Width=Screen.PrimaryScreen.WorkingArea.Width; this.Height=Screen.PrimaryScreen.WorkingArea.Height; pictureBox1.Width=this.Width; pictureBox1.Height=this.Height; } private void pictureBox1_MouseClick(object sender, MouseEventArgs e) { if (this.Opacity < 1) { this.Opacity=1; timer1.Enabled=false; } else { this.Close(); } } private void timer1_Tick(object sender, EventArgs e) { this.Opacity=this.Opacity+0.01; } }
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,969
地点
英国
编程经验
10+
最低的不透明度范围从0开始,最高到100。

您还可以使用相同的计时器使其淡入和淡出吗?
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,969
地点
英国
编程经验
10+
是的,根据上面的链接,您可以使用0-100的整数或0.0-1.0的整数,但是可以改善现有的 @ksor 如果要它淡入淡出吗?它的作用是,如果表单淡入淡出,它将淡入,反之亦然,如果淡入淡出,她会为您淡出。试试吧 ::
C#:
        private void RunMethod()
        {
            doBegin = true;
            timer1.Interval = 85;
            timer1.Start();
        }
        private void Button1_Click(object sender, EventArgs e)
        {
            if (mode == 0) mode = 1;
            else mode = 0;
            RunMethod();
        }
        private int mode = 0; private bool doBegin; private double valueOpacity = 0.0;

        private void Timer1_Tick(object sender, EventArgs e)
        {
            if (doBegin == true && valueOpacity == 0.0) { valueOpacity = 0.1; mode = 0; }
            if (doBegin == true && valueOpacity == 1.0) { valueOpacity = 0.9; mode = 1; }
            if (doBegin == true && mode == 0) valueOpacity = valueOpacity + 0.1;
            if (doBegin == true && mode == 1) valueOpacity = valueOpacity - 0.1;
            if (valueOpacity <= 0.0) { timer1.Stop(); doBegin = false; this.Opacity = 0.0; valueOpacity = this.Opacity; }
            if (valueOpacity >= 1.0) { timer1.Stop(); doBegin = false; this.Opacity = 1.0; valueOpacity = this.Opacity; }
            this.Opacity = valueOpacity;
        }
        private void PictureBox1_Click(object sender, EventArgs e)
        {
            if (mode == 0) mode = 1;
            else mode = 0;
            RunMethod();
        }
请注意,在代码中,如何只用::增加不透明度
C#:
private void timer1_Tick(object sender, EventArgs e) {
this.Opacity=this.Opacity+0.01;
}

希望这可以帮助。

Edit, just to Add : If you want to make the transition period faster, you can lower this timer1.Interval = 85; or higher the value to slow down the transition. Getting the balance is important, as the higher your interval, the more laggy your transitions looks as it increments slower.
 
Last edited:
已加入
2019年7月4日
留言内容
10
编程经验
10+
现在,我已经在台式机上使用了一段时间……所以我看到了台式机,然后图片慢慢出现,并替换了台式机。

也许最好先从全黑屏幕开始,然后图片慢慢显示-我尝试给Form设置背景色为BLACK,但它不起作用,因为它是具有Opacity属性而不是picturebox的FORM。

这是怎么做的?
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,969
地点
英国
编程经验
10+
我没有关注,请解释一下,并尽可能详细地说明您要执行的操作。我已经为您提供的内容使整个窗口透明条带有一些边框...

这是什么意思:
现在我需要让图片从黑屏淡入...如何在C#中做到这一点?
这意味着您想要表单为黑色,并且要在表单上的图像中淡出吗?对还是错?
我从那里得到了很多东西,它们叫Unity……不知道它是什么-我想要用C#。
对于winform和透明度,我不熟悉任何帮助。我所知道的唯一Unity是一个名为unity3D的游戏引擎,我用它为自己的客户制作开放世界/ FPS游戏。那对你没有帮助。
我尝试给Form设置背景色为BLACK,但是它不起作用,因为它是具有Opacity属性而不是picturebox的FORM。
为什么表格需要为您黑色?

是的,表单确实具有不透明度,而没有图片框。但是表格确实有一个 透明键属性 -并且可以将面板设置为透明控件,也可以将面板的背景色设置为与“表单透明键”颜色相​​同。也许调查会引导您朝着不同的方向发展。

但是,您真正需要做的是:
  1. 详细说明您要执行的操作。 (我鼓励阐述)
  2. 详细说明您期望的结果。
  3. 详细说明我上面发布的示例不能满足您的需求吗?
请具体说明。
 
已加入
2019年7月4日
留言内容
10
编程经验
10+
我在第一篇文章中解释了我想要的...

现在我已经有了一些工作代码,它可以满足我在第12条中描述的工作要求

与我的第一篇文章相比,它首先显示了我的桌面……我在第一篇文章中想要的就是开始显示一个黑屏。 -我现在要问的...就这么简单!

我喜欢旧的Occams Razor ... KIS原理的早期版本...保持简单...我不认为您的代码与此吻合-不好意思。
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,969
地点
英国
编程经验
10+
我的代码与我一开始所希望的一致。您和您的帖子很好地说明了为什么我通常不立即提供代码示例,这就是为什么我倾向于问更多的问题,而不是向人们扔无关紧要的答案。这就是为什么您对我们尽可能具有描述性很重要,以便我们能够了解您想要做什么;为什么要这样做;以及您打算如何做;只有清楚了解之后,我们才能及时为您提供快速解答。而不是四处逛逛,向您扔出代码来处理实际上被误解为您想要的东西。不要以为我们知道您在想什么,为什么要这么做,因为我们不知道。我们不介意读者,如果我们不要求更多信息,那么为您提供帮助将变得更加困难。

它耗费了足够的时间,使我们抽出时间来花一些时间给那些不想我们编写代码的人打扰,因为他们从不费心将更多信息投入到关于开幕主题的详尽解释中,从而使我们能够清楚了解您要执行的操作以及原因。从而误导我们,或者在这种情况下,如果信息不明确,就会误导我。假定您想要一张褪色的图片,该图片停靠在您的表单中。由于Picturebox缺少与Windows窗体不透明度属性提供的功能相同的功能,因此它 仍然可以做到,但是比较复杂,但是通过我已经给您的介绍,可以更轻松地做到。另外,这在WPF中最简单。

此外,感谢所有试图帮助您的人,这是我们的共同礼貌,毕竟您将获得免费的服务和免费的建议,有时甚至还有免费的代码示例,而且一无是处。在忽略我给你的东西之前,在13号帖子上花一些时间 不在线 与您的要求。在我看来;在不褪色的情况下从蝙蝠显示黑屏是很丑陋的,而且不是必须的,只是将图片滚动到非常丑陋的黑表单上似乎是没有意义的。但这只是我的观点,我的观点基于以下事实: 知道你为什么做自己的工作或出于什么原因。从视觉角度看,如果窗体也会淡入淡出,而不仅仅是控件淡入淡出,那会更酷。您实际上在第13个帖子中有一个可行的解决方案,但是如果您能在两行之间阅读,我相信您可以自己解决这个问题,就像您对我们的期望一样。  (y)

假设一个程序员想要做什么是不明智的做法,因为没有两个意识形态拥有相同的理论。

我的朋友,这个项目祝你好运。
 
最佳 底部