Windows UWP C# API使用IRandomAccessStreamReference,虽然我可以像下面这样获得一个字节数组,但我不能使用我期望在BitmapImage (从WPF)中找到的方法来生成位图图像;即使我可以,我也觉得这个解决方案太笨拙和繁琐,不是预期的方法,而且它滥用了异步加载。
这在UWP中编译:
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;
}由于BeginInit、CacheOption、BitmapCacheOption、StreamSource和EndInit未定义,因此无法在UWP中编译:
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联系人,我想为其构造一个集合,并绑定到它;类似于:
public void InitialiseSomeViewModel()
{
var contactStore = ContactManager.RequestStoreAsync();
contactStore.GetResults().FindContactsAsync().GetResults();
ContactInfo = c.Select(x => new MyContactEntity { Name = x.Name, Thumbnail = x.Thumbnail});
}请注意,本例中的Thumbnail为IRansomAccessStreamReference
发布于 2016-06-03 20:57:13
我认为最好的方法是使用带有IValueConverter接口的InMemoryRandomAccessStream。因此,您可以解码执行运行时绑定的字节数组。
首先,您需要在XAML的Image Control中指定Image转换器。
然后,您可以使用以下IValueConverter来解码字节数组。
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();
}
}https://stackoverflow.com/questions/37613106
复制相似问题