c#将图片文件保存到ram中

Mah*_*hin 1 c# ram image file

我正在开发一个图像处理程序,我需要从视频中保存一些图片并对它们进行一些处理.当1张图片处理它并没有真正花时间,但是当我在处理100张图片这让我保存文件到我的硬盘的区别,这就是为什么它需要时间的事情是,我的功能m using是一个现成的函数,它只接受(文件名)函数真的很复杂,所以我不能建立自己的函数(如果这是你在想的)

我现在正在考虑两件事,并希望得到你的意见:

  1. 改变功能的输入,但如何?有没有办法将此输入从(文件名)更改为包含这些图片的数组?
  2. 将文件保存到ram.但如何通过名称将文件保存到ram,并能够在函数中将它们用作(文件名)?

感谢您的帮助,非常感谢

这是我的代码,但我仍有问题:

            Capture video = new Capture("c:\\5.avi");
            Image<Bgr, Byte> Imageframe ;

            Dictionary<string, MemoryStream> dict = new Dictionary<string, MemoryStream>();

                Imageframe = video.QueryFrame();
                Bitmap bmp = Imageframe.ToBitmap();
                dict.Add("mypicture.png", new MemoryStream());
                bmp.Save(dict["mypicture.png"],imageformat.png);    
Run Code Online (Sandbox Code Playgroud)

它说的图像格式在上下文中不存在

这是我使用的函数:

Image<Bgr, byte> result;
                 result = DrawMatches.Draw("box.png", "box_in_scene.png", out matchTime,i); 
Run Code Online (Sandbox Code Playgroud)

Llo*_*oyd 5

您可以使用a保存到RAM(在最宽松的感官中)MemoryStream.如果你想为它们命名,你可以使用a Dictionary<string,MemoryStream>,例如:

Dictionary<string,MemoryStream> dict = new Dictionary<string,MemoryStream>();

dict.Add("mypicture.png",new MemoryStream());

image.Save(dict["mypicture.png"]);
Run Code Online (Sandbox Code Playgroud)

但是你需要编写这些流清除代码,这并没有考虑到最终你可以使用所有的物理内存,然后开始进入分页文件,这无论如何是基于磁盘的.

顺便说一句,如果这是你控制的服务器上,你就没有释放这个软件给最终用户,你可以得到一个使用物理内存作为到Windows中可用的实际磁盘RAM磁盘驱动器(很多周围只是谷歌).然后你可以加载/保存到那个.

非常非常粗糙的 EmguCv变种:

// Global dictionary of memory streams
Dictionary<string,MemoryStream> dict = new Dictionary<string,MemoryStream>();

// Add image memory stream to dictionary
dict.Add("mypicture.png",new MemoryStream());

// Get bitmap from EmguCv
Bitmap bmp = image.ToBitmap();

// Save bitmap to image memory stream
bmp.Save(dict["mypicture.png"],ImageFormat.Png);

// Get bitmap from memory stream
dict["mypicture.png"].Seek(0,SeekOrigin.Begin);
Bitmap new_bmp = Image.FromStream(dict["mypicture.png"]);

// Convert bitmap to EmguCv image
Image<Bgr,Byte> new_img = new Image<Bgr,Byte>(new_bmp);
Run Code Online (Sandbox Code Playgroud)