2017-10-04 2 views
2

J'essaie de charger une image par une chaîne de base 64 donnée.Base64String to ImageSource déclenche une exception non gérée

je le XAML suivant Image:

<Image x:Name="CustomImage"></Image> 

Et je cette méthode sur la page de classe, dont est appelée après InitializeComponent() dans le constructeur:

public void LoadImage(string imageString) 
{ 
    CustomImage.Source = ImageSource.FromStream(() => 
    { 
     return imageString.StringToStream(); 
    }); 
} 

La méthode d'extension appelée:

public static Stream StringToStream(this string image) 
{ 
    var imageBytes = Convert.FromBase64String(image); 
    using (var ms = new MemoryStream()) 
    { 
     ms.Write(imageBytes, 0, imageBytes.Length); 
     return ms; 
    } 
} 

Aucune exception n'est levée par la méthode, mais une exception non gérée est lancé après l'exécution du code.

Qu'est-ce que je fais mal? Je ne peux pas attraper l'exception, car il est jeté en dehors de mon code.

+1

Qu'est-ce que le message d'erreur dire? – waka

+0

"Une exception non gérée s'est produite." Aucun détail –

Répondre

1

Essayez ci-dessous le code:

CustomImage.Source = ImageSource.FromStream(
       () => new MemoryStream(Convert.FromBase64String(imageString))); 
+0

Merci. Ça a marché! Mais, je ne peux pas voir la différence, pourquoi mon code n'a pas fonctionné? Peut-être l'instruction using qui dispose de la mémoire en continu? Je le pense. –

+0

@RodrigoGRodrigues voir ce que j'ai dit dans ma réponse. Dans votre code, vous écrivez le flux et lorsque vous le faites, le flux reste incapable d'être lu par la méthode 'FromStream'. –

0

les opérations suivantes:

CustomImage.Source = ImageSource.FromStream(() => new MemoryStream(System.Convert.FromBase64String(imageString))); 
1

Probablement l'erreur est que la position du curseur est à la fin du flux.

Vous pouvez corriger changer votre code comme ceci:

La méthode LoadImage:

public void LoadImage(string imageString) 
{ 
    CustomImage.Source = ImageSource.FromStream(() => imageString.StringToStream()); 
} 

La méthode d'extension:

public static Stream StringToStream(this string image) 
{ 
    var imageBytes = Convert.FromBase64String(image); 
    return new MemoryStream(imageBytes); 
}