none
Stream怎么转成IRandomAccessStream RRS feed

答案

  • 用 WindowsRuntimeStreamExtensions.AsInputStream/AsOutputStream 方法。

    没有方法直接到 IRandomAccessStream 的,不过这样你已经可以在Metro操作 Stream 了。

    下面代码就是可以进行IInputStream IOutputStream 和 Stream 之间相互转换

                StorageFile file = await KnownFolders.DocumentsLibrary.GetFileAsync(@"123.txt");
                using (IRandomAccessStream irs = await file.OpenAsync(FileAccessMode.ReadWrite))
                {
                    Stream s = irs.AsStreamForRead();
                    IInputStream ins = s.AsInputStream();
    
                    Stream s2 = irs.AsStreamForWrite();
                    IOutputStream os = s2.AsOutputStream();
                }


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年4月13日 9:41
    版主
  • StorageFile sf = await Package.Current.InstalledLocation.GetFileAsync(@"Assets\Logo.png");
    这句话里Package怎么调用不到呢?我的是WIN8 VS2012运行环境!


    这么使用就可以了

    Uriuri = newUri("ms-appx:///Font/simsun.ttc");

    StorageFilefile = awaitWindows.Storage.StorageFile.GetFileFromApplicationUriAsync(uri);

    2012年8月23日 9:14

全部回复

  • 用 WindowsRuntimeStreamExtensions.AsInputStream/AsOutputStream 方法。

    没有方法直接到 IRandomAccessStream 的,不过这样你已经可以在Metro操作 Stream 了。

    下面代码就是可以进行IInputStream IOutputStream 和 Stream 之间相互转换

                StorageFile file = await KnownFolders.DocumentsLibrary.GetFileAsync(@"123.txt");
                using (IRandomAccessStream irs = await file.OpenAsync(FileAccessMode.ReadWrite))
                {
                    Stream s = irs.AsStreamForRead();
                    IInputStream ins = s.AsInputStream();
    
                    Stream s2 = irs.AsStreamForWrite();
                    IOutputStream os = s2.AsOutputStream();
                }


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年4月13日 9:41
    版主
  • 远程传过来的图片stream,怎么能转成Windows.UI.Xaml.Media.Imaging.BitmapImage呢

    2012年4月15日 12:38
  • 缓存为本地临时文件,然后再读取成 BitmapImage。

    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年4月15日 16:01
    版主
  • 没有比较直接的转法么,这个类RandomAccessStreamOverStream有什么用
    2012年4月16日 3:00
  • 如果缓冲成本地临时文件,那直接在程序里引用这个文件就可以了。

    但就是想把远程的图像流直接绑定到数据源里。

    Leo06053308:

    如果一个远程地址返回的就是一个图片stream的话,直接把这个地址绑定到数据源上,gridview就可以显示出来。

    2012年4月16日 4:44
  • 没有比较直接的转法么,这个类RandomAccessStreamOverStream有什么用

    Remarks

    The InputStreamOverStreamOutputStreamOverStream, and RandomAccessStreamOverStream classes are interop helpers to convert between the Windows Runtime stream types, which are natively asynchronous, and the Component Object Model (COM)IStream types, which are natively synchronous. 

    文档解释:在 COM IStream 和WinRT Stream之间提供转换



    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年4月16日 5:00
    版主
  • 为什么在c++里面,怎么都转不成功。
    2012年4月16日 5:12
  • 通过DataReader/DataWriter 先将数据转成IBuffer, 然后再到 IRandomAccessStream :  http://code.msdn.microsoft.com/windowsapps/File-access-sample-d723e597 C++版例子有相关将 String 到IBuffer的代码

    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年4月16日 5:30
    版主
  • Array<byte,1>^ bufArray = ref new Array<byte,1>((byte*)(PageBuffer),nBufSize);
    	auto rasos = ref new InMemoryRandomAccessStream();
    	rasos->Size = nBufSize;
    	DataWriter^ dataWriter = ref new DataWriter(rasos->GetOutputStreamAt(0));
    	dataWriter->WriteBytes(bufArray);
    	task<unsigned int>(dataWriter->StoreAsync()).then([this,rasos](unsigned int bytesWritten)
    	{
    		/*WriteableBitmap^ wb = ref new WriteableBitmap(FS_Bitmap_GetWidth(m_bitmap),FS_Bitmap_GetHeight(m_bitmap));
    		wb->SetSource(safe_cast<IRandomAccessStream^>(rasos));
    		wb->Invalidate();
    		img_page->Source = wb;*/
    
    		BitmapImage^ bitmapImagee =ref new BitmapImage();
    		bitmapImagee->DecodePixelHeight = FS_Bitmap_GetHeight(m_bitmap);
    		bitmapImagee->DecodePixelWidth = FS_Bitmap_GetWidth(m_bitmap);
    		bitmapImagee->SetSource(rasos);
    		img_page->Source = bitmapImagee;
    
    	});
    这一段代码有什么问题吗?为什么总是不成功呢?你说的例子看了好多遍了。
    2012年4月16日 6:27
  • 我在你的帖子中给你跟进:  http://social.msdn.microsoft.com/Forums/zh-CN/metroappzhcn/thread/168a82eb-1561-40a0-a4f1-bc60f4984593 

    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年4月16日 8:17
    版主
  •       

    下面是c#的代码,可以把图片stream直接转成Windows.UI.Xaml.Media.Imaging.BitmapImage!

    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; }



    2012年4月18日 17:08
  • InMemoryRandomAccessStream 继承了IRandomAccessStream接口

    2012年4月18日 17:11
  • 你的这个方法是哪来的:OpenStreamForReadAsync()?
    2012年4月24日 3:52
  • http://msdn.microsoft.com/en-us/library/hh582102(VS.110).aspx

    .Net System.IO 提供给WinRT的扩展方法。

     

    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年4月24日 4:42
    版主
  • 有道理,谢谢Leo06053308
    2012年4月26日 4:44
  •       

    下面是c#的代码,可以把图片stream直接转成Windows.UI.Xaml.Media.Imaging.BitmapImage!

    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; }



    我用这个好像没有显示图片


    Grant

    2012年6月7日 14:04
  •       

    下面是c#的代码,可以把图片stream直接转成Windows.UI.Xaml.Media.Imaging.BitmapImage!

    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; }



    我用这个好像没有显示图片


    Grant

    你的代码是怎么样的,贴出来看看,肯定有其他的代码导致了图像没有显示,特别是你有Image控件去显示图片吗?他的布局是怎么样的? 

    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年6月11日 10:42
    版主
  •       

    下面是c#的代码,可以把图片stream直接转成Windows.UI.Xaml.Media.Imaging.BitmapImage!

    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; }



    我用这个好像没有显示图片


    Grant

    你的代码是怎么样的,贴出来看看,肯定有其他的代码导致了图像没有显示,特别是你有Image控件去显示图片吗?他的布局是怎么样的? 

    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

                                        InMemoryRandomAccessStream ras = new InMemoryRandomAccessStream();
                                        await imageInfo.CopyToAsync(ras.AsStreamForWrite());
                                        BitmapImage bi = new BitmapImage();
                                        bi.SetSource(ras);
                                        imageData.Source = bi;

      其中:

    Stream imageInfo


    Grant

    2012年6月11日 13:30
  • imageInfo 是如何来的?


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年6月12日 10:02
    版主
  • imageInfo 是如何来的?


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    Stream imageInfo  

         从一个zip文件中读出来的 return zipEntry.Open(); //stream


    Grant

    2012年6月14日 13:09
  • imageInfo  出来的不是一个图片的流吧,她的内容不是图片吧。 请保证你的imageInfo 是个图片流。

    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年6月15日 5:59
    版主
  • imageInfo  出来的不是一个图片的流吧,她的内容不是图片吧。 请保证你的imageInfo 是个图片流。

    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    从一个zip文件中读出来的 

                foreach (var zipEntry in zipArchive.Entries)
                {
                    if (zipEntry.FullName == “t.jpg”)
                    {
                        return zipEntry.Open(); //stream
                    }
                }

    而其中的 zipArchive 是整个zip文件的文件流

    这个读出来怎么不是图片文件流,是其他格式吗?

    那是什么格式呢?


    Grant

    2012年6月17日 4:28
  • 你是否根据这个帖子来读取 zip 文档? http://social.msdn.microsoft.com/Forums/zh-CN/metroappzhcn/thread/669bbd49-2873-4484-a5f3-fd44a612263e

    然后你的代码应该这么写:

      InMemoryRandomAccessStream ras = new InMemoryRandomAccessStream();
      Stream s = ras.AsStreamForWrite();
      await imageInfo.CopyToAsync(s);
      await s.FlushAsync(); //需要提交数据
      BitmapImage bi = new BitmapImage();
      ras.Seek(0);  // 注意需要回到0位置
      bi.SetSource(ras); 
      img.Source = bi;


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年6月18日 10:41
    版主
  • StorageFile sf = await Package.Current.InstalledLocation.GetFileAsync(@"Assets\Logo.png");
    这句话里Package怎么调用不到呢?我的是WIN8 VS2012运行环境!

    2012年8月23日 6:29
  • StorageFile sf = await Package.Current.InstalledLocation.GetFileAsync(@"Assets\Logo.png");
    这句话里Package怎么调用不到呢?我的是WIN8 VS2012运行环境!


    这么使用就可以了

    Uriuri = newUri("ms-appx:///Font/simsun.ttc");

    StorageFilefile = awaitWindows.Storage.StorageFile.GetFileFromApplicationUriAsync(uri);

    2012年8月23日 9:14