Question

Ce code retourne une vignette d'une image chargée à partir d'un tableau d'octets. J'essaie de comprendre pourquoi l'auteur utilise 4 flux de mémoire et s'il existe un moyen simple de le récrire ou s'il est correct tel qu'il est.

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);
                }
            }
        }
   }
}
Était-ce utile?

La solution

En fait, il n’utilise que 3 MemoryStreams ici, mais il n’en utilise que 2 (je pense). Vous devriez pouvoir remplacer ce code:

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

avec ceci:

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

Je pense qu’il a créé le troisième MemoryStream car le ms MemoryStream n’était pas au début.

Autres conseils

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()))
        {
            return thumbPhoto;
        }
   }
}

Je pense que cela sera juste

Je pense qu'il manque aux réponses précédentes que l'auteur force une conversion en jpeg.

Je pense que le dernier, m , peut être éliminé. Réinitialiser simplement ms.Position = 0 serait suffisant. Notez que les principales économies consisteraient à éliminer le ms.ToArray () .

Les autres MemoryStreams semblent nécessaires, ou du moins, il y a peu à gagner en les éliminant ou en les réutilisant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top