我怎样才能对图像进行数据处理?

时间:2016-02-22 16:03:29

标签: xamarin.forms

如何使用XAML对图像进行数据绑定?

具体来说,我有一个流对象,我想将其转换为图像。

但是,我找不到如何执行此操作的基本示例。

1。 viewmodel属性是什么样的?

  • 我是否使用ImageSource?

  • 我需要值转换器吗?

2。 XAML是什么样的?

2 个答案:

答案 0 :(得分:3)

表单有一个StreamImageSource,您可以使用它来执行此操作。但是,如果不编写自定义转换器,我认为你不能在XAML中使用它。要在代码中使用它,您可以这样做:

image1.Source = ImageSource.FromStream(() =>
{
  // whatever you need to do to create your stream
  return stream;
});

答案 1 :(得分:2)

该演示通过代码说明了绑定。对于XAML实现,您需要以下内容: -

<Image Source="{Binding MyImageAsBytes, Converter={StaticResource MyByteToImageSourceConverter}}" />

byte[]中有ViewModel后,需要转换器将包含图像的字节数组转换为Xamarin.Forms ImageSource

转换器获取byte[]数组并通过以下方式转换为ImageSource: -

objImageSource = ImageSource.FromStream(() => new MemoryStream(bytImageData));

示例: -

StackLayout objStackLayout = new StackLayout();

byte[] bytImage = { your image as a byte collection }

this.BindingContext = new MyImageViewModel()
{
    MyImageAsBytes = bytImage
};

Image objImage = new Image();
objImage.SetBinding(Image.SourceProperty, "MyImageAsBytes", converter: new MyByteToImageSourceConverter());

objStackLayout.Children.Add(objImage);

<强>视图模型: -

public class MyImageViewModel
    : Xamarin.Forms.View
{
    public static readonly BindableProperty MyImageAsBytesProperty = BindableProperty.Create<MyImageViewModel, byte[]>(p => p.MyImageAsBytes, default(byte[]));

    public byte[] MyImageAsBytes
    {
        get { return (byte[])GetValue(MyImageAsBytesProperty); }
        set { SetValue(MyImageAsBytesProperty, value); }
    }
}

<强>转换器: -

public class MyByteToImageSourceConverter
    : IValueConverter
{
    public object Convert(object pobjValue, Type pobjTargetType, object pobjParameter, System.Globalization.CultureInfo pobjCulture)
    {
        ImageSource objImageSource;
        //
        if (pobjValue != null)
        {
            byte[] bytImageData = (byte[])pobjValue;
            //
            objImageSource = ImageSource.FromStream(() => new MemoryStream(bytImageData));
        }
        else
        {
            objImageSource = null;
        }   
        //
        return objImageSource;
    }

    public object ConvertBack(object pobjValue, Type pobjTargetType, object pobjParameter, System.Globalization.CultureInfo pobjCulture)
    {
        throw new NotImplementedException();
    }
}