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を作成し、画像を他のアプリと共有するためにrequstデータパックを設定します
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に変換できる場合は、同じことが役立ちます。または私のコードに別のエラーがありますか?
ドキュメントの先頭に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;
}
Windows 8.1では、AsRandomAccessStream拡張メソッドを追加したため、さらに簡単になりました。
internal static IRandomAccessStream ConvertTo(byte[] arr)
{
MemoryStream stream = new MemoryStream(arr);
return stream.AsRandomAccessStream();
}
一行で:
internal static IRandomAccessStream ConvertTo(byte[] arr)
{
return arr.AsBuffer().AsStream().AsRandomAccessStream();
}