首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将XAML图像绑定到IRandomAccessStreamReference

将XAML图像绑定到IRandomAccessStreamReference
EN

Stack Overflow用户
提问于 2016-06-03 19:24:05
回答 1查看 504关注 0票数 0

Windows UWP C# API使用IRandomAccessStreamReference,虽然我可以像下面这样获得一个字节数组,但我不能使用我期望在BitmapImage (从WPF)中找到的方法来生成位图图像;即使我可以,我也觉得这个解决方案太笨拙和繁琐,不是预期的方法,而且它滥用了异步加载。

这在UWP中编译:

代码语言:javascript
复制
private static byte[] GetBytes(IRandomAccessStreamReference r)
{
    var stream = r.OpenReadAsync().GetResults();

    var bytes = new byte[stream.Size];
    stream.ReadAsync(bytes.AsBuffer(), (uint)stream.Size, InputStreamOptions.None).GetResults();

    return bytes;
}

由于BeginInitCacheOptionBitmapCacheOptionStreamSourceEndInit未定义,因此无法在UWP中编译:

代码语言:javascript
复制
public static BitmapImage ToImage(byte[] array)
{
    using (var ms = new System.IO.MemoryStream(array))
    {
        var image = new BitmapImage();
        image.BeginInit();
        image.CacheOption = BitmapCacheOption.OnLoad; // here
        image.StreamSource = ms;
        image.EndInit();
        return image;
    }
}

我应该如何最好地使用IRandomAccessStreamReference来显示图像与UWP?

我的具体用例是处理Windows联系人,我想为其构造一个集合,并绑定到它;类似于:

代码语言:javascript
复制
public void InitialiseSomeViewModel()
{
    var contactStore = ContactManager.RequestStoreAsync();
    contactStore.GetResults().FindContactsAsync().GetResults();

    ContactInfo = c.Select(x => new MyContactEntity { Name = x.Name, Thumbnail = x.Thumbnail});
}

请注意,本例中的ThumbnailIRansomAccessStreamReference

EN

回答 1

Stack Overflow用户

发布于 2016-06-03 20:57:13

我认为最好的方法是使用带有IValueConverter接口的InMemoryRandomAccessStream。因此,您可以解码执行运行时绑定的字节数组。

首先,您需要在XAML的Image Control中指定Image转换器。

然后,您可以使用以下IValueConverter来解码字节数组。

代码语言:javascript
复制
class ImageConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        if (value == null || !(value is byte[]))
            return null;
        using (InMemoryRandomAccessStream ms = new InMemoryRandomAccessStream())
        {
            using (DataWriter writer = new DataWriter(ms.GetOutputStreamAt(0)))
            {
                writer.WriteBytes((byte[])value);
                writer.StoreAsync().GetResults();
            }
            var image = new BitmapImage();
            image.SetSource(ms);

            //other specification

            return image;
        }
    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        throw new NotImplementedException();
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37613106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档