0

我正在开发一个程序来从四个相机中抓取图像,并将它们变成一张图片,只有四张风格,一张四张图片。它会生成一个 .avi

        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,它需要很长时间。这段代码会有什么问题或有更好的方法吗?

4

1 回答 1

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 并添加位图。有了这个速度更快,几乎不占用内存。

于 2013-04-18T13:32:52.893 回答