AVIReader -花费太长时间来保存帧
本文关键字:保存 长时间 AVIReader | 更新日期: 2023-09-27 18:09:36
我正在开发一个程序,从四个相机抓取图像,并把它们变成一个图片,只有在风格四,四图像在一个。然后生成。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,这需要很长时间。在这个代码中会有任何问题或有更好的方法吗?
我找到答案了。
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和添加位图。