如何在C#中混合来自两种不同方法的输出图像?

时间:2014-03-18 12:34:08

标签: c# image list

我遇到了以下问题,

我有一个基于C#的应用程序,它有两行图像生成:

Line-1基于某些数学计算每秒生成一系列帧。每个帧(图像)由黑色和白色像素组成,它们形成图案。

第2行正在生成另一系列基于随机噪声发生器的帧。所以它们只是不同的帧,只包含噪音! 现在,我的问题是我需要随机将这两行中的帧混合在一起。通过意味着,例如,我需要从第1行选择5帧,从第2行选择3帧,依此类推将它们随机混合在一起。这种混合程序会随机变化。

我自己的解决方案是,如果我将第1行制作中的图像存储在单独的列表中,将第2行制作存储在另一个列表中,这样我就可以随机选择这两个列表。但是,由于这些图像实时生成,我不知道该解决方案是否有效。有没有人对我的问题有任何替代解决方案?;)

1 个答案:

答案 0 :(得分:0)

我会使用队列(Queue(T)ConcurrentQueue(T))来存储图像。假设您使用一个线程来填充每个队列,并使用一个队列来消耗这两个队列。

示例:

  private ConcurrentQueue<Bitmap> line1 = new ConcurrentQueue<Bitmap>();
  private ConcurrentQueue<Bitmap> line2 = new ConcurrentQueue<Bitmap>();
  private Random randomGenerator = new Random();

  //thread 1
  private void FillLine1()
  {
     //your line 1 image producation code
     Bitmap yourCalculatedBitmap = new Bitmap(100,100);
     line1.Enqueue(yourCalculatedBitmap);
  }

  //thread 2
  private void FillLine2()
  {
     //your line 2 image production code
     Bitmap yourCalculatedBitmap = new Bitmap(100,100);
     line1.Enqueue(yourCalculatedBitmap);
  }

  //thread 3
  private Bitmap RandomImageSelection()
  {
     Bitmap image;

     if (randomGenerator.Next(2) == 0 && line1.TryDequeue(out image))
     {
        return image;
     }

     if (line2.TryDequeue(out image))
     {
        return image;
     }

     return null;
  }
相关问题