2013-05-06 4 views
13

jetzt hatte ich ein Problem, wie Byte Array in InMemoryRandomAccessStream oder IRandomAccessStream in Windows 8 konvertieren?Wie konvertiert man Byte-Array in InMemoryRandomAccessStream oder IRandomAccessStream in Windows 8

Dies ist mein Code, aber es did't Arbeit finden Sie den folgenden Code

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

Und dann schaffe ich das RandomAccessStreamReference und stellen Sie die requst Datapack, um das Bild zu anderen App

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

Aber das Ergebnis ist, kann ich nicht das Bild Byte-Array zu anderen App teilen, hat mein Code ein Problem? Meiner Meinung nach tritt der Fehler auf, wenn Byte [] in InMemoryRandomAccessStream konvertiert wird, aber es hat keine Ausnahme ausgelöst.

Jeder weiß, wie es geht? Und auch wenn Sie das Byte-Array in IRandomAccessStream konvertieren können, kann mir das gleiche helfen. Oder ein anderer Fehler in meinem Code?

+0

Was genau mit dem Code falsch ist, haben Sie? –

+0

Bitte überprüfen Sie [diese] (http://canbilgin.wordpress.com/2012/06/06/how-to-convert-byte-array-to-irandomaccessstream/) & sagen Sie mir, wenn Sie das Problem lösen können. – Xyroid

Antwort

17

Fügen Sie die using-Anweisung am Anfang des Dokuments hinzu.

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

mehr danke, es funktioniert für mich –

24

Unter Windows 8.1 ist es noch einfacher, da wir die AsRandomAccessStream Erweiterungsmethode hinzugefügt:

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

Dies scheint nicht für einige Szenarien zu arbeiten, wie in https://stackoverflow.com/questions/22332217/unauthorizedaccessexception-using-asrandomaccessstream beschrieben – tibel

3

In einer Zeile:

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