将 Byte[] 数组转换为 Xamarin 形式的图像

Jes*_*cko 7 arrays image image-conversion xamarin.forms

在问这个问题之前,我用谷歌搜索了很多,但找不到适合我的解决方案。

Xamarin.Forms我有一个byte[]数组,我想将该byte[]数组转换为Image. 我怎样才能做到这一点,这是我尝试过的:

在前端(XAML):

<StackLayout BackgroundColor="Olive" x:Name="imagePanel">
    <Image x:Name="PdfImage" Aspect="AspectFill" IsVisible="true"/>
</StackLayout>   
Run Code Online (Sandbox Code Playgroud)

在代码隐藏(C#)中:

byte[] imageAsBytes = Constant.jsonPDF;

var stream1 = new MemoryStream(imageAsBytes);
PdfImage.Source = ImageSource.FromStream(() => new MemoryStream(imageAsBytes));

imagePanel.Children.Add(PdfImage);
Run Code Online (Sandbox Code Playgroud)

但我的问题是图像没有显示。

谁能告诉我我做错了什么。任何帮助将不胜感激。

小智 9

(XAML):

 <Image Grid.Row="1" x:Name="IncidentImageData" Grid.ColumnSpan="4" BackgroundColor="DarkGray" Aspect="AspectFill" WidthRequest="50" HeightRequest="175"/> 
Run Code Online (Sandbox Code Playgroud)

viewModel.SImageBase64 是一个字节[]

代码隐藏(C#):

var stream1 = new MemoryStream(viewModel.SImageBase64);
IncidentImageData.Source = ImageSource.FromStream(() => stream1);
Run Code Online (Sandbox Code Playgroud)

只是我这样做了,图像已显示。


小智 9

一个潜在的解决办法

我知道这个帖子已经有两年了,但我想我应该在这里为那些也为此苦苦挣扎的人发布一个可行的解决方案。刚刚花了半天时间研究并尝试解决同样的问题,这篇文章中编写代码的方式对我帮助很大,因为它几乎 100% 正确。您只需提供 MemoryStream 作为FromStream()方法内 lambda 函数的返回。

改变这个:

PdfImage.Source = ImageSource.FromStream(() => new MemoryStream(imageAsBytes));
Run Code Online (Sandbox Code Playgroud)

到:

PdfImage.Source = ImageSource.FromStream(() =>
{
     return new MemoryStream(imageAsBytes);
});
Run Code Online (Sandbox Code Playgroud)

从 Xamarin Forms 5.0.0.2012 开始,该代码片段应该可以正常工作

完整代码:

byte[] imageAsBytes = Constant.jsonPDF;

PdfImage.Source = ImageSource.FromStream(() =>
{
     return new MemoryStream(imageAsBytes);
});

imagePanel.Children.Add(PdfImage);
Run Code Online (Sandbox Code Playgroud)