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

时间:2013-01-28 12:30:55

标签: c# file image ram

我正在开发一个图像处理程序,我需要从视频中保存一些图片并对它们进行一些处理。 在处理1张图片时,它并不需要时间, 但是,当我处理100张图片时,它会有所不同 我将文件保存到我的硬盘上,这就是为什么需要时间 问题是,我正在使用的函数是一个现成的函数,它只接受(文件名) 这个函数非常复杂,所以我无法构建自己的函数(如果这就是你的想法)

我现在正在考虑两件事情,并希望对你有所了解:

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

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

                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);    
    

    它的说法imageformat在上下文中不存在

    这是我使用的函数:

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

3 个答案:

答案 0 :(得分:5)

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

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

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

image.Save(dict["mypicture.png"]);

然而,您需要为这些流编写清理代码,这并没有考虑到最终您可以用完所有物理RAM然后开始进入分页文件,无论如何都是基于磁盘的。

顺便说一句,如果这是在你控制的服务器上,并且你没有将这个软件发布给最终用户,那么你可以获得一个RAM磁盘驱动器(很多只是谷歌),它使用物理RAM作为Windows可用的实际磁盘。然后你可以加载/保存到那个。

非常非常粗糙 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);

答案 1 :(得分:0)

尝试使用MemoryStream 来处理与文件一样的内存, 并尝试通过thread

将文件保存在硬盘上

答案 2 :(得分:0)

我知道你正在使用一个你没有源代码的DLL。 您可以将其加载到反射器中,并对其进行修改以将图像作为参数而不是文件名。 我过去使用过Red Gate的反射器,它对我很有用:http://www.reflector.net/