2013-05-06 10 views
13

ora ho avuto un problema che è come convertire la matrice di byte in InMemoryRandomAccessStream o IRandomAccessStream in windows 8?Come convertire la matrice di byte in InMemoryRandomAccessStream o IRandomAccessStream in windows 8

Questo è il mio codice, ma did't lavoro, consultare il seguente codice

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

E poi creo il RandomAccessStreamReference e impostare la Datapack facciano richiesta, al fine di condividere l'immagine ad altre 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); 
    } 

Ma il risultato è che non riesco a condividere l'array di byte immagine su altre app, il mio codice ha un problema? A mio parere, l'errore si verifica quando converti il ​​byte [] in InMemoryRandomAccessStream, ma non genera eccezioni.

Qualcuno sa come farlo? E anche se è possibile convertire l'array di byte in IRandomAccessStream, lo stesso può aiutarmi. O un altro errore nel mio codice?

+0

Che cosa è esattamente sbagliato con il codice che avete? –

+0

Si prega di controllare [questo] (http://canbilgin.wordpress.com/2012/06/06/how-to-convert-byte-array-to-irandomaccessstream/) e dimmi se è possibile risolvere il problema. – Xyroid

risposta

17

Aggiungere l'istruzione using nella parte superiore del documento.

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

più grazie, funziona per me –

24

In Windows 8.1 è ancora più facile, come abbiamo aggiunto il metodo di estensione AsRandomAccessStream:

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

Questo sembra non funzionare per alcuni scenari, come descritto in https://stackoverflow.com/questions/22332217/unauthorizedaccessexception-using-asrandomaccessstream – tibel

3

In una sola riga:

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