2

此代码返回从字节数组加载的图像的缩略图。我试图理解为什么作者使用 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);
                }
            }
        }
   }
}
4

4 回答 4

3

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

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

有了这个:

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

我认为他创建了第三个 MemoryStream,因为msMemoryStream 不是一开始的。

于 2009-10-22T16:01:38.180 回答
1
public Image GetThumbnail(int height, int width)
{
    //从字节数组(imageData)加载图像
    使用 (MemoryStream mem = new MemoryStream(this.imageData))
    {
        // 从图像创建缩略图
        使用 (Image thumbPhoto = Image.FromStream(mem,
            true).GetThumbnailImage(高度,宽度,空,
            新 System.IntPtr()))
        {
            返回拇指照片;
        }
   }
}

我认为这是对的

于 2009-10-22T16:02:50.067 回答
1

我认为之前的答案缺少作者强制转换为 jpeg 的情况。

于 2009-10-22T16:03:33.050 回答
1

我认为最后一个,m,可以消除。只需重置ms.Position=0就足够了。请注意,主要节省将消除ms.ToArray().

其他 MemoryStreams 看起来很有必要,或者至少通过消除或重新使用它们几乎没有什么好处。

于 2009-10-22T16:04:49.953 回答