Как преобразовать массив байтов в InMemoryRandomAccessStream или IRandomAccessStream в окнах 8 - программирование

Как преобразовать массив байтов в InMemoryRandomAccessStream или IRandomAccessStream в окнах 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 и устанавливаю reatust 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);
    }

Но в результате я не могу передать массив байтов изображения другому приложению, возникает ли у моего кода проблема? По-моему, ошибка возникает при преобразовании байта [] в InMemoryRandomAccessStream, но это не исключение.

Кто-нибудь знает, как это сделать? А также, если вы можете преобразовать массив байтов в IRandomAccessStream, то то же самое может мне помочь. Или другая ошибка в моем коде?

4b9b3361

Ответ 1

Добавьте оператор 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;
}

Ответ 2

В Windows 8.1 это еще проще, поскольку мы добавили метод расширения AsRandomAccessStream:

internal static IRandomAccessStream ConvertTo(byte[] arr)
{
    MemoryStream stream = new MemoryStream(arr);
    return stream.AsRandomAccessStream();
}

Ответ 3

В одной строке:

internal static IRandomAccessStream ConvertTo(byte[] arr)
{
    return arr.AsBuffer().AsStream().AsRandomAccessStream();
}