Pregunta

I have a problem converting byte array to InMemoryRandomAccessStream or IRandomAccessStream in windows 8?

This is my code, but It doesn't work :

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;
}

And I created the RandomAccessStreamReference and set the requst datapack in order to share the image to other app

private static async void OnDeferredImageStreamRequestedHandler(DataProviderRequest Request) 
{
    DataProviderDeferral deferral = Request.GetDeferral();
    InMemoryRandomAccessStream stream = await ConvertTo(arr);
    
    RandomAccessStreamReference referenceStream =
            RandomAccessStreamReference.CreateFromStream(stream);
    
    Request.SetData(referenceStream);
}

There's no exception but I can't use the result image byte array

I think there's an error when converting byte[] to InMemoryRandomAccessStream, but it doesn't throw an exception.

Anybody know how to implement it?

if anyone knows how to convert the byte array to IRandomAccessStream, it's also appreciated

¿Fue útil?

Solución

Add the using statement at the top of the document.

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;
}

Otros consejos

On Windows 8.1 it's even easier as we added the AsRandomAccessStream extension method:

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

In one line:

internal static IRandomAccessStream ConvertTo(byte[] arr)
{
    return arr.AsBuffer().AsStream().AsRandomAccessStream();
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top