2013-05-06 30 views
13

teraz mam problem, w jaki sposób konwertować tablicy bajtów do InMemoryRandomAccessStream lub IRandomAccessStream w systemie Windows 8?Jak przekonwertować tablicę bajtów na InMemoryRandomAccessStream lub IRandomAccessStream w systemie Windows 8

To jest mój kod, ale did't pracy, patrz poniższy kod

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

I wtedy stworzyć RandomAccessStreamReference i ustawić datapack requst aby podzielić obraz do innej aplikacji

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

Ale wynik jest taki, że nie mogę udostępnić tablicy bajtów obrazu innej aplikacji, Czy mój kod ma problem? Moim zdaniem, błąd występuje po konwersji bajtu [] na InMemoryRandomAccessStream, ale nie wyrzucił wyjątku.

Ktoś wie, jak to zrobić? A także, jeśli możesz przekonwertować tablicę bajtów na IRandomAccessStream, to samo może mi pomóc. Lub inny błąd w moim kodzie?

+0

co dokładnie jest nie tak z kodem masz? –

+0

Proszę sprawdzić [to] (http://canbilgin.wordpress.com/2012/06/06/how-to-convert-byte-array-to-irandomaccessstream/) i powiedz mi, czy możesz rozwiązać problem. – Xyroid

Odpowiedz

17

Dodaj instrukcję using u góry dokumentu.

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

więcej dziękuję, to działa dla mnie –

24

W Windows 8.1 to nawet łatwiejsze, ponieważ dodaliśmy AsRandomAccessStream metodę rozszerzenia:

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

To wydaje się nie działać dla niektórych scenariuszy, jak opisano w https://stackoverflow.com/questions/22332217/unauthorizedaccessexception-using-asrandomaccessstream – tibel

3

W jednym wierszu:

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