2017-10-04 42 views
2

我试图通过给定的base 64字符串加载图像。Base64String到ImageSource引发未处理的异常

我有以下XAML图片:

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

和我有类网页上这个方法,其InitializeComponent()后调用构造函数:

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

称为扩展方法:

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; 
    } 
} 

该方法没有抛出异常,但未处理的异常在代码执行后抛出。

我做错了什么?我无法捕捉到异常,因为它被抛出我的代码之外。

+1

什么错误信息说? – waka

+0

“发生未处理的异常。”没有细节。 –

回答

1

试试下面的代码:

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

谢谢。有效!但是,我看不出差别,为什么我的代码不起作用? 也许配置内存流的使用语句?我想是这样。 –

+0

@RodrigoGRodrigues在我的回答中看到了我所说的。在你的代码中,你正在写入流,当你这样做时,流保持不能被'FromStream'方法读取。 –

0

尝试以下操作:

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

大概错误是,光标的位置位于流的末尾。

你可以纠正它改变你的代码是这样的:

的的LoadImage方法:

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

扩展方法:

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