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が最初になかったので、彼は3番目のMemoryStreamを作成したと思いますms

于 2009-10-22T16:01:38.180 に答える
1
public Image GetThumbnail(int height、int width)
{{
    //バイト配列から画像をロードします(imageData)
    using(MemoryStream mem = new MemoryStream(this.imageData))
    {{
        //画像からサムネイルを作成します
        using(Image thumbPhoto = Image.FromStream(mem、
            true).GetThumbnailImage(height、width、null、
            新しいSystem.IntPtr()))
        {{
            thumbPhotoを返します。
        }
   }
}

これは正しいと思います

于 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 に答える