2013-04-17 1 views
0

Я разрабатываю программу для захвата изображений с четырех камер и превращаю их в одну картинку только в стиле quad, 4 изображения в одном. И генерирование .aviAVIReader - слишком долго, чтобы сэкономить кадры

 AVIReader reader = new AVIReader(); 
     List<byte[]> ImagemMainb = new List<byte[]>(); 
     reader.Open(_rootPath + Path.GetFileName(_arqsCam01[i])); 
     while (reader.Position - reader.Start < reader.Length) 
      { 
       Bitmap aux = reader.GetNextFrame(); 
       Bitmap r = new Bitmap(aux.Width * 2, aux.Height * 2, System.Drawing.Imaging.PixelFormat.Format24bppRgb); 
       using (var g = Graphics.FromImage(r)) 
       { 
        g.DrawImage(aux, new Rectangle(0, 0, aux.Width, aux.Height)); 
        ImagemMainb.Add(ImageToByte(r));                
       }          
      } 
      reader.Close(); 
      reader.Dispose(); 

А вот метод ImageToByte

public static byte[] ImageToByte(Image img) 
    { 
     byte[] byteArray = new byte[0]; 
     using (MemoryStream stream = new MemoryStream()) 
     { 
      img.Save(stream, System.Drawing.Imaging.ImageFormat.Png); 
      stream.Close(); 

      byteArray = stream.ToArray(); 
     } 
     return byteArray; 
    } 

Использование этих кодов занимает слишком много времени, чтобы закончить процесс! Когда у меня есть список из 84000 растровых изображений, в этом случае 280 видео с частотой кадров = 5, размер = 320x240, это требуется навсегда. У вас возникли бы проблемы с этим кодом или у вас был бы лучший способ?

ответ

0

Я нашел ответ.

AVIReader reader = new AVIReader(); 
List<Bitmap> ImagemMain = new List<byte[]>(); 
reader.Open(_rootPath + Path.GetFileName(_arqs[0])); 
while (reader.Position - reader.Start < reader.Length) 
{ 
     using (var aux = reader.GetNextFrame()) 
     { 
      using (var r = new Bitmap(640, 480)) 
      { 
        using (var g = Graphics.FromImage(r)) 
        {            
         g.DrawImage(aux, new Rectangle(0, 0, aux.Width, aux.Height));             
         ImagemMain.Add((Bitmap)r.Clone()); 
        } 

      } 
     } 
    } 

Каждое загруженное видео AVIWriter Открывает файл .avi и добавляет растровое изображение. С этим намного быстрее и не занимает почти никакой памяти.