如何在 Windows 8 中将字节数组转换为 InMemoryRandomAccessStream 或 IRandomAccessStream
Posted
技术标签:
【中文标题】如何在 Windows 8 中将字节数组转换为 InMemoryRandomAccessStream 或 IRandomAccessStream【英文标题】:c# UWP - Convert byte array to InMemoryRandomAccessStream/IRandomAccessStream 【发布时间】:2013-04-30 03:15:04 【问题描述】:现在我遇到了一个问题,即?
这是我的代码,但是没有用,参考下面的代码
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 并告诉我是否可以解决问题。 【参考方案1】:在 Windows 8.1 上,由于我们添加了 AsRandomAccessStream 扩展方法,因此更加容易:
internal static IRandomAccessStream ConvertTo(byte[] arr)
MemoryStream stream = new MemoryStream(arr);
return stream.AsRandomAccessStream();
【讨论】:
这似乎不适用于某些场景,如***.com/questions/22332217/…中所述【参考方案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次数据的动作。您需要检查是否没有发生这种情况才能使答案可用。以上是关于如何在 Windows 8 中将字节数组转换为 InMemoryRandomAccessStream 或 IRandomAccessStream的主要内容,如果未能解决你的问题,请参考以下文章