将A Byte []数组转换为Xamarin表单中的图像

时间:2016-12-06 19:21:23

标签: arrays image xamarin.forms image-conversion

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

Xamarin.Forms我有byte[]数组,我希望将byte[]数组转换为Image。我怎样才能实现这一目标,这就是我的尝试:

在前端(XAML):

<StackLayout BackgroundColor="Olive" x:Name="imagePanel">
    <Image x:Name="PdfImage" Aspect="AspectFill" IsVisible="true"/>
</StackLayout>   

代码背后(C#):

byte[] imageAsBytes = Constant.jsonPDF;

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

imagePanel.Children.Add(PdfImage);

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

有人可以告诉我我做错了什么。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:2)

(XAML):

 <Image Grid.Row="1" x:Name="IncidentImageData" Grid.ColumnSpan="4" BackgroundColor="DarkGray" Aspect="AspectFill" WidthRequest="50" HeightRequest="175"/> 

viewModel.SImageBase64是一个byte []

背后的代码(C#):

var stream1 = new MemoryStream(viewModel.SImageBase64);
IncidentImageData.Source = ImageSource.FromStream(() => stream1);

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

答案 1 :(得分:0)

使用此代码:

imgUserImage.Source = ImageSource.FromStream(() => new MemoryStream(userList.Single().ProfilePhoto));

个人资料照片类型为byte []

public byte[] ProfilePhoto { get; set; }

答案 2 :(得分:0)

一个潜在的修复

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

改变这个:

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

致:

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

并且该代码段应该从 Xamarin Forms 5.0.0.2012 开始工作

完整代码:

byte[] imageAsBytes = Constant.jsonPDF;

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

imagePanel.Children.Add(PdfImage);