【问题标题】:How can I generate a random image using random function for infinite time?如何使用随机函数生成无限时间的随机图像?
【发布时间】:2014-02-19 12:19:34
【问题描述】:

我正在编写一个使用随机像素生成位图图像的代码。我想像电影剪辑一样在显示器上一个接一个地播放这些随机生成的图像。
我基本上需要一个循环,每次都考虑我的功能并生成一个新图像,然后将其显示到我的图像框并重复此过程无限时间

While (true)
{
    foreach (Point p in blackPixels)
    {
       if (r.NextDouble() < 0.20)
       {
           bmp.SetPixel(p.X, p.Y, Color.Black);
       }
       else
       {
           bmp.SetPixel(p.X, p.Y, Color.White);
       }
    }

    pictureBox1.Image = bmp;
}

我的问题是我已将整个代码放入“While (true)”,但它使程序崩溃了!
谁能告诉我正确的方式来处理每一帧都能正常工作并且可以连续显示每一帧的代码?

【问题讨论】:

  • “程序崩溃”是什么意思?是否有任何异常导致应用程序终止?如果它只是冻结并且不允许任何输入,请检查您的代码并告诉我们您希望在循环运行时处理任何输入的循环的哪个部分。
  • 是的,基本上它什么都不显示,只是停止工作
  • 所以 - 当您的 while (true) 循环正在运行时,您希望应用程序在哪里(在哪一行)处理任何用户输入?

标签: c# image random


【解决方案1】:

您可以尝试以下方法:

DispatcherTimer timer = new DispatcherTimer();
timer.Interval = new TimeSpan(0, 0, 16);
timer.Tick += delegate
{
    timer.Stop();
    // your foreach code here
    foreach (Point p in blackPixels)
        ...
    timer.Start();
};
timer.Start();

它应该每 16 秒更新一次图片,而不会阻塞 GUI 线程。

为了准确起见,请确保在关闭表单之前使用timer.Stop 停止计时器。

【讨论】:

  • @user3266873 代码以 16 秒的间隔执行,直到计时器停止。如果您只想执行n 次,您可以添加一个计数器并在委托中增加它。当它超过限制时,您不会再次启动计时器。
  • 感谢您的评论;你能解释一下 (0, 0, 16) 值是什么吗?以及如何连续播放帧(没有延迟)?
  • @user3266873 这些分别是TimeSpan 的小时、分钟和秒。见msdn.microsoft.com/en-us/library/…
  • 它给了我“DispatcherTimer”的参考错误!我应该在我的项目中添加任何库吗?
  • 我假设您使用 WPF。也许您需要添加using System.Windows.Threading; 才能使用DispatcherTimer
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-09
  • 2013-12-08
相关资源
最近更新 更多