将byte []转换为Windows.UI.Xaml.Media.Imaging.BitmapImage

时间:2017-03-01 05:02:47

标签: c# win-universal-app

使用通用Windows应用程序并尝试绑定xaml中字节数组的图像。我有点失落。在xaml我有类似的东西:

<Image Source="{Binding SelectedImageSource}"
           Stretch="UniformToFill"
           Grid.Row="1"/>

在我的视图模型中我有

private byte[] _selectedImageSource;
    public byte[] SelectedImageSource
    {
        get { return _selectedImageSource; }
        set
        {
            _selectedImageSource = value;
            OnPropertyChanged(nameof(SelectedImageSource));
        }
    }

但我在这里看不到图像。我认为我需要做的是将byte []转换为Windows.UI.Xaml.Media.Imaging.BitmapImage。虽然如何做到这一点,我并不是百分之百确定,如果这是正确的事情。

3 个答案:

答案 0 :(得分:4)

试试这个:

public static async Task<BitmapImage> GetBitmapAsync(byte[] data)
{
    var bitmapImage = new BitmapImage();

    using (var stream = new InMemoryRandomAccessStream())
    {
        using (var writer = new DataWriter(stream))
        {
            writer.WriteBytes(data);
            await writer.StoreAsync();
            await writer.FlushAsync();
            writer.DetachStream();
        }

        stream.Seek(0);
        await bitmapImage.SetSourceAsync(stream);
    }

    return bitmapImage;
}

您也可以尝试更简单的版本described here,但我认为我遇到了一些问题,这就是为什么我现在使用上面的代码。

答案 1 :(得分:2)

工作正常:

    public async Task<BitmapImage> MyBitmapAsync(byte[] value)
    {
        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);
            return image;
        }
    }

答案 2 :(得分:1)