Как преобразовать массив байтов в InMemoryRandomAccessStream или IRandomAccessStream в windows 8
теперь у меня возникла проблема, как преобразовать массив байтов в inmemoryrandomaccessstream или IRandomAccessStream в windows 8?
Это мой код, но он не работает, см. следующий код
internal static async Task<InMemoryRandomAccessStream> ConvertTo(byte[] arr)
{
InMemoryRandomAccessStream randomAccessStream = new InMemoryRandomAccessStream();
Stream stream = randomAccessStream.AsStream();
await stream.WriteAsync(arr, 0, arr.Length);
await stream.FlushAsync();
return randomAccessStream;
}
и затем я создаю RandomAccessStreamReference и устанавливаю requst datapack, чтобы поделиться изображением с другим приложением
private static async void OnDeferredImageStreamRequestedHandler(DataProviderRequest Request)
{
DataProviderDeferral deferral = Request.GetDeferral();
InMemoryRandomAccessStream stream = await ConvertTo(arr);
RandomAccessStreamReference referenceStream =
RandomAccessStreamReference.CreateFromStream(stream);
Request.SetData(referenceStream);
}
но в результате я не могу поделиться массивом байтов изображения с другим приложением, есть ли у моего кода проблема? На мой взгляд, ошибка возникает при преобразовании byte[] в InMemoryRandomAccessStream, но не вызывает исключения.
кто-нибудь знает, как это сделать? А также, если вы можете преобразовать массив байтов в IRandomAccessStream, то же самое может мне помочь. Или еще одна ошибка в моем коде?
3 ответов
добавить using
заявление в верхней части документа.
using System.Runtime.InteropServices.WindowsRuntime;
internal static async Task<InMemoryRandomAccessStream> ConvertTo(byte[] arr)
{
InMemoryRandomAccessStream randomAccessStream = new InMemoryRandomAccessStream();
await randomAccessStream.WriteAsync(arr.AsBuffer());
randomAccessStream.Seek(0); // Just to be sure.
// I don't think you need to flush here, but if it doesn't work, give it a try.
return randomAccessStream;
}
в Windows 8.1 это еще проще, поскольку мы добавили метод расширения AsRandomAccessStream:
internal static IRandomAccessStream ConvertTo(byte[] arr)
{
MemoryStream stream = new MemoryStream(arr);
return stream.AsRandomAccessStream();
}
в одну строку:
internal static IRandomAccessStream ConvertTo(byte[] arr)
{
return arr.AsBuffer().AsStream().AsRandomAccessStream();
}