c# - 如何简化此 MemoryStream 代码

标签 c# memorystream

此代码返回从字节数组加载的图像的缩略图。我试图理解为什么作者使用 4 个内存流,以及是否有一种简单的方法可以重写它,或者这样是否可以。

public Image GetThumbnail(int height, int width)
{
    //load the image from a byte array (imageData)
    using (MemoryStream mem = new MemoryStream(this.imageData))
    {
        // Create a Thumbnail from the image
        using (Image thumbPhoto = Image.FromStream(mem, 
            true).GetThumbnailImage(height, width, null, 
            new System.IntPtr()))
        {
            // Convert the Image object to a byte array
            using (MemoryStream ms = new MemoryStream())
            {
                thumbPhoto.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
                using (MemoryStream m = new MemoryStream(ms.ToArray()))
                {
                    return Image.FromStream(m, true);
                }
            }
        }
   }
}

最佳答案

他实际上只使用了 3 个 MemoryStream,但他只需要使用 2 个(我认为)。您应该能够替换此代码:

using (MemoryStream m = new MemoryStream(ms.ToArray()))                
{                    
    return Image.FromStream(m, true);                
}

这样:

ms.Seek(0, SeekOrigin.Begin);
return Image.FromStream(ms, true);

我认为他创建了第三个 MemoryStream,因为 ms MemoryStream 不在开始处。

关于c# - 如何简化此 MemoryStream 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1608190/

相关文章:

c# - 使用 StreamWriter 写入 MemoryStream 返回空

c# - 如何在应用程序加载时仅在 ASP.net MVC 中运行一次方法而不从 Application_Start() 调用它

c# - EF 异常 : String or binary data would be truncated. 语句已终止。?

c# - 将 MS Access 数据库转换为 Web 应用程序的简便方法

c# - 如何创建 Expression<Func<dynamic, dynamic>> - 或者它是一个错误?

c# - 在内存中创建文本文件,然后将其上传到 Azure Blob 存储

arrays - 如何在运行时将多个图像从数据库保存到 TMemoryStream 并稍后提取它们

c# - 使用 WebClient 启用压缩

c# - 在多个线程中将 Stream 读取到 MemoryStream