lujiguo115 发表于 2015-5-21 06:11:50

win8 app Stream 转成IRandomAccessStream

async private void Test()
      {
            StorageFile sf = await Package.Current.InstalledLocation.GetFileAsync(@"Assets\Logo.png");
            InMemoryRandomAccessStream ras = new InMemoryRandomAccessStream();
            using (Stream stream = await sf.OpenStreamForReadAsync())
            {
                await stream.CopyToAsync(ras.AsStreamForWrite());
            }
            BitmapImage bi = new BitmapImage();
            bi.SetSource(ras);
            img.Source = bi;
      }  
  InMemoryRandomAccessStream 继承了IRandomAccessStream接口
  
WindowsRuntimeStorageExtensions.OpenStreamForReadAsync 方法 ()
http://msdn.microsoft.com/zh-cn/library/hh582102(VS.110).aspx
  OpenStreamForReadAsync()方法是 .Net System.IO 提供给WinRT的扩展方法。
  
  方法2:

//获取图片文件
            StorageFile file = await Package.Current.InstalledLocation.GetFileAsync(@"Assets\Backgroud.jpg");
         Stream stream=   await file.OpenStreamForReadAsync();
         byte[] bytes = ConvertStreamTobyte(stream);
         InMemoryRandomAccessStream randomAccessStream = new InMemoryRandomAccessStream();
         //将randomAccessStream 转成 IOutputStream
         var outputStream = randomAccessStream.GetOutputStreamAt(0);
         //实例化一个DataWriter
         DataWriter datawriter = new DataWriter(outputStream);
         //将Byte数组数据写进OutputStream
         datawriter.WriteBytes(bytes);
         //在缓冲区提交数据到一个存储区
         await datawriter.StoreAsync();
         //将InMemoryRandomAccessStream给位图
         BitmapImage bitmapImage = new BitmapImage();
         bitmapImage.SetSource(randomAccessStream);image1.Source = bitmapImage;  


public byte[] ConvertStreamTobyte(Stream stream)
      {
            byte[] buffer = new byte;
            using (MemoryStream ms = new MemoryStream())
            {
                int read;
                while ((read = stream.Read(buffer, 0, buffer.Length)) > 0)
                {
                  ms.Write(buffer, 0, read);
                }
                return ms.ToArray();
            }
      }   
  
页: [1]
查看完整版本: win8 app Stream 转成IRandomAccessStream