【问题标题】:Loading a picture file Image.FromFile VS FileStream加载图片文件 Image.FromFile VS FileStream
【发布时间】:2011-04-01 13:33:01
【问题描述】:

我必须承认,我从来不明白流是什么——我一直认为这是互联网的东西。但是现在我遇到了一个使用流本地加载文件的代码,我想知道使用流是否有优势......以及我总是加载文件的方式:

private void loadingfromStream()
{
   DirectoryInfo dirInfo = new DirectoryInfo("c:/");
   FileInfo[] fileInfoArr = dirInfo.GetFiles();
   FileInfo fileInfo = fileInfoArr[0];       

   // creating a bitmap from a stream
   FileStream fileStream = fileInfo.OpenRead();            
   Bitmap bitmap = new Bitmap(fileStream);  
   Image currentPicture = (Image)bitmap       
}

对比

private void loadingUsingImageClass
{    
   Image currentPicture = Image.FromFile(originalPath);
}

【问题讨论】:

    标签: c# image filesystems loading fromfile


    【解决方案1】:

    嗯,文件通常也被视为流。这就是打开文件的主要类称为 FileStream 的原因。但是有一个特定的操作系统功能可以使处理图像文件的效率很多。它被称为“内存映射文件”,一种将文件内容直接映射到内存的功能。涉及一些烟雾和镜子,但它本质上使文件直接可用而无需阅读它。存储文件数据所需的内存不会占用分页文件中的空间。

    非常高效,当您对 .bmp 格式的图像使用 FromFile() 或 Bitmap(string) 构造函数时,您将免费获得它。从流中加载图像往往需要两倍的内存量,这对于大图像来说总是一个问题。

    【讨论】:

      【解决方案2】:

      作为对乔恩回答的补充:

      据我所知,这两种方法的作用也不相同。第一个为您提供"C:\" 中的第一张图像,而第二个只是为您提供来自路径的图像。所以第一个增加的复杂性不仅仅是因为它使用了流。

      这将是等效的:

      using (var fs = File.OpenRead(path))
      using (var img = Image.FromStream(fs))
      {
          //...
      }
      

      在这种情况下,使用 Image.FromFile 肯定会更好,正如 Jon 解释的那样。

      【讨论】:

        【解决方案3】:

        如果你想处理图像文件,当然第二种方案更好。在您的第一部分中,您有Bitmap bitmap = new Bitmap(fileStream); 您知道图像文件并不总是位图,它也可以是 JPEG/PNG/TIFF 等。而Image.FromFile在处理不同扩展名的图片文件方面相当专业。

        一般来说,FileStream 常见于文件问题,而Image.FromFile 更特别适用于图像文件。这取决于您要处理的文件类型。

        【讨论】:

          【解决方案4】:

          如果您知道您的代码将从文件中加载数据,请使用Image.FromFile - 这显然是更简单的代码,而且框架内可能在处理时进行了优化文件。

          使用流更灵活,但除非您需要这种灵活性,否则请使用文件解决方案。

          【讨论】:

          • 当我需要同时从多个点访问我的图像时,哪种方法更好?就像同时在 3 个地方显示图像并进行编辑一样。
          • @SanthoshKumar:如果没有更多信息,很难回答这个问题,这应该是另一个问题。我希望Image.FromFile 没事。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-02-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-06-03
          • 2020-09-26
          相关资源
          最近更新 更多