如何在Xamarin中加载二进制图像 [英] How load binary images in Xamarin

查看:58
本文介绍了如何在Xamarin中加载二进制图像的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用Xamarin Forms,并且我想使用图像单元格加载列表视图,同时还要将数据与XAML绑定在一起. 我的网络服务提供商向我返回了图像的二进制代码,有人知道如何将其转换为显示图像吗?

I'm working with Xamarin Forms and I want to load a listview with imagecells, also I'm binding the data with XAML. My webservice provider returns me the binary code of the images, ¿someone knows how I can convert this to show the image?

这是我的XAML列表视图模板:

This is my XAML listview template:

    <ListView x:Name="lv_products">

      <ListView.ItemTemplate>
        <DataTemplate>
          <ImageCell
                    Text="{Binding Name}"
                    Detail="{Binding Description}"
                    ImageSource="{Binding Image, Converter={StaticResource cnvImage}}">
          </ImageCell>
        </DataTemplate>

      </ListView.ItemTemplate>
    </ListView>

以及转换器:

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value != null && value is byte[])
        {

            byte[] binary = (byte[])value;

            Image image = new Image();
            image.Source = ImageSource.FromStream(() => new MemoryStream(binary));

            return image.Source;
        }
        return null;
    }

但是图片显示为空白(透明).

But picture appears empty (transparent).

推荐答案

此处正在运行转换器.我使用MemoryStream和ImageSource.FromStream.

Here is working converter. I use MemoryStream and ImageSource.FromStream.

public class ByteImageConverter : IValueConverter
{
    public object Convert(object value, Type targetType,
                          object parameter, CultureInfo culture)
    {
        var image = value as byte[];
        if (image == null)
            return null;
        return ImageSource.FromStream(() => new MemoryStream(image));
    }

    public object ConvertBack(object value, Type targetType,
                              object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

这就是我的页面

public partial class Page : ContentPage
{
    readonly ViewModel _bindingContext = new ViewModel();

    public Page()
    {
        InitializeComponent();

        BindingContext = _bindingContext;
        LoadImage();
    }

    private async void LoadImage()
    {
        var assembly = typeof (ByteImageConverter).GetTypeInfo().Assembly;
        var stream = assembly
              .GetManifestResourceStream("TestImage.c5qdlJqrb04.jpg");
        using (var ms = new MemoryStream())
        {
            await stream.CopyToAsync(ms);
            _bindingContext.Image = ms.ToArray();
        }
    }
}

public class ViewModel : INotifyPropertyChanged
{
    private byte[] _image;
    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged(
                             [CallerMemberName] string propertyName = null)
    {
        var handler = PropertyChanged;
        if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
    }

    public byte[] Image
    {
        get { return _image; }
        set
        {
            _image = value;
            OnPropertyChanged();
        }
    }
}

这篇关于如何在Xamarin中加载二进制图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆