18

Windows 8でバイト配列をInMemoryRandomAccessStreamまたはIRandomAccessStreamに変換する方法に問題がありましたか?

これは私のコードですが、うまくいきませんでした。次のコードを参照してください

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 を作成し、画像を他のアプリと共有するためにリクエスト データパックを設定します。

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

しかし、その結果、画像のバイト配列を他のアプリと共有できません。コードに問題はありますか? 私の意見では、byte[] を InMemoryRandomAccessStream に変換するとエラーが発生しますが、例外はスローされませんでした。

誰もそれを行う方法を知っていますか? また、バイト配列を IRandomAccessStream に変換できれば、同じことが役に立ちます。または私のコードに別のエラーがありますか?

4

3 に答える 3

25

Windows 8.1 では、AsRandomAccessStream 拡張メソッドを追加したため、さらに簡単になりました。

internal static IRandomAccessStream ConvertTo(byte[] arr)
{
    MemoryStream stream = new MemoryStream(arr);
    return stream.AsRandomAccessStream();
}
于 2013-06-28T00:22:56.200 に答える
24

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;
}
于 2013-05-09T17:21:49.260 に答える