WindowsストアアプリでSystem.IO.Stream型のストリームからIBufferオブジェクトへ変換する方法をご紹介します。
事前にusingディレクティブにSystem.Runtime.InteropServices.WindowsRuntime名前空間を宣言しておきます。System.IO.Stream型のストリームからbyte型配列に一旦データを読み込んで、byte型配列の拡張メソッドを使ってIBuffer型のオブジェクトへ変換します。
// using System.Runtime.InteropServices.WindowsRuntime; IBuffer buffer = null; using (System.IO.Stream strm = GetStream()) using (var reader = new System.IO.BinaryReader(strm)) { var bytes = new byte[strm.Length]; reader.Read(bytes, 0, bytes.Length); buffer = bytes.AsBuffer(); }
ネット上の画像をダウンロードする
このTipsの応用例を紹介します。System.Net.Http名前空間のHttpClientクラスを使って、インターネット上の画像ファイルのストリームを取得します。その後、Stream型からIBuffer型に変換して上で、ファイルをアプリテンポラリフォルダへ保存しています。
// using System.Runtime.InteropServices.WindowsRuntime; var imageUrl = "http://example.com/hoge.jpg"; var temp = Windows.Storage.ApplicationData.Current.TemporaryFolder; var fileName = "hoge.jpg"; var client = new System.Net.Http.HttpClient(); using (var strm = await client.GetStreamAsync(new Uri(imageUrl))) using (var reader = new System.IO.BinaryReader(strm)) { var bytes = new byte[strm.Length]; reader.Read(bytes, 0, bytes.Length); var buffer = bytes.AsBuffer(); // ファイルに保存する var file = await temp.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting); using (var fileStrm = await file.OpenAsync(FileAccessMode.ReadWrite)) { await fileStrm.WriteAsync(buffer); } }