2016-08-12 1 views
0

J'essaie de "copier" une image d'une autre image, de réduire sa hauteur et sa largeur et de la renvoyer en tant que flux pour la récupérer dans une autre classe et afficher en tant qu'image. Mais quand je reçois le flux dans l'autre classe, et l'exception est levée; "Impossible d'accéder au flux fermé".Impossible d'accéder à un flux fermé Exception

Cette méthode obtient le chemin de l'image, réduit sa taille et renvoie un flux.

public Stream getImagenCopia (string dataImagen) 
    { 
     Bitmap ImageOrig = BitmapFactory.DecodeFile (dataImagen); 
     var ImagenCopia = Bitmap.CreateScaledBitmap (ImageOrig, 80, 80, false); 


     using (MemoryStream ms = new MemoryStream()) 
     { 
      ImagenCopia.Compress (Bitmap.CompressFormat.Jpeg, 40, ms); 

      return ms; 
     } 
    } 

Cette méthode reçoit le flux et elle met en source d'image

var cim = auxFotos.getImagenCopia(path); 
setImagen(img, cim); 

void setImagen (Image img, Stream strm) 
    { 
     img.Source = ImageSource.FromStream (() => 
     { 
      return strm; 
     }); 
    } 

Répondre

2

Vous disposer du MemoryStream parce que vous utilisez un bloc using. Au moment où vous essayez d'utiliser la valeur de retour plus tard dans votre code, il n'est pas disponible.

using (MemoryStream ms = new MemoryStream()) 
{ 
    ImagenCopia.Compress (Bitmap.CompressFormat.Jpeg, 40, ms); 

    return ms; 
} 

Supprimer l'énoncé using:

Bitmap ImageOrig = BitmapFactory.DecodeFile(dataImagen); 
var ImagenCopia = Bitmap.CreateScaledBitmap(ImageOrig, 80, 80, false); 

var ms = new MemoryStream()); 
ImagenCopia.Compress(Bitmap.CompressFormat.Jpeg, 40, ms); 
return ms; 

Si vous voyez pic de consommation de mémoire parce que les ressources ne sont pas des déchets collectés, vous pouvez avoir à nettoyer manuellement après que vous avez fini de l'utiliser, peut-être en appelant .Dispose() à ce sujet.

+0

Merci Grant !! Une autre question, 'var ImagenCopia = Bitmap.CreateScaledBitmap (ImageOrig, 80,80, false);' est-ce exact? Je ne pense pas que cela fonctionne parce que l'image n'apparaît pas dans img.Source et je ne reçois pas de messages d'erreur ou quoi que ce soit :( –

+0

Pas de problème @Samir.Je ne suis pas sûr ... vous feriez mieux de poster un nouvelle question avec tous les détails pertinents pour cette question particulière –

+0

Ok, je vais le faire! Merci encore! :) –