【问题标题】:c# UWP - Convert byte array to InMemoryRandomAccessStream/IRandomAccessStream如何在 Windows 8 中将字节数组转换为 InMemoryRandomAccessStream 或 IRandomAccessStream
【发布时间】:2013-04-30 03:15:04
【问题描述】:

现在我遇到了一个问题,即如何在 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,同样可以帮助我。还是我的代码中的另一个错误?

【问题讨论】:

  • 你的代码到底有什么问题?
  • 请查看this 并告诉我是否可以解决问题。

标签: c# xaml uwp windows-8 microsoft-metro


【解决方案1】:

在 Windows 8.1 上,由于我们添加了 AsRandomAccessStream 扩展方法,因此更加容易:

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

【讨论】:

【解决方案2】:

在文档顶部添加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;
}

【讨论】:

    【解决方案3】:

    一行:

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

    【讨论】:

    • 看起来像是复制了3次数据的动作。您需要检查是否没有发生这种情况才能使答案可用。
    猜你喜欢
    • 2016-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-05
    • 2015-08-23
    • 2014-05-17
    • 2016-02-26
    • 1970-01-01
    相关资源
    最近更新 更多