【问题标题】:Save a remote image in to Isolated Storage将远程图像保存到独立存储中
【发布时间】:2012-06-06 22:49:58
【问题描述】:

我尝试使用此代码下载图片:

void downloadImage(){
 WebClient client = new WebClient();
 client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(client_DownloadStringCompleted);
                client.DownloadStringAsync(new Uri("http://mysite/image.png"));

        }

void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
        {
           //how get stream of image?? 
           PicToIsoStore(stream)
        }

        private void PicToIsoStore(Stream pic)
        {
            using (var isoStore = IsolatedStorageFile.GetUserStoreForApplication())
            {
                var bi = new BitmapImage();
                bi.SetSource(pic);
                var wb = new WriteableBitmap(bi);
                using (var isoFileStream = isoStore.CreateFile("somepic.jpg"))
                {
                    var width = wb.PixelWidth;
                    var height = wb.PixelHeight;
                    Extensions.SaveJpeg(wb, isoFileStream, width, height, 0, 100);
                }
            }
        }

问题是:如何获取图像流?

谢谢!

【问题讨论】:

    标签: c# silverlight windows-phone-7


    【解决方案1】:

    在独立存储中获取流到文件很容易。 IsolatedStorageFile 有一个 OpenFile 方法可以得到一个。

    using (IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication())
    {
        using (IsolatedStorageFileStream stream = store.OpenFile("somepic.jpg", FileMode.Open))
        {
            // do something with the stream
        }
    }
    

    【讨论】:

      【解决方案2】:

      client_DownloadStringCompleted 方法中调用PicToIsoStore 时需要将e.Result 作为参数输入

      void client_DownloadStringCompleted(object sender,
           DownloadStringCompletedEventArgs e)
              {
                 PicToIsoStore(e.Result);
              }
      

      WebClient 类获取响应并将其存储在e.Result 变量中。如果你仔细看,e.Result 的类型已经是Stream 所以它已经准备好传递给你的方法PicToIsoStore

      【讨论】:

        【解决方案3】:

        有一个简单的方法

        WebClient client = new WebClient();
        client.OpenReadCompleted += (s, e) =>
        {
            PicToIsoStore(e.Result);
        };
        client.OpenReadAsync(new Uri("http://mysite/image.png", UriKind.Absolute));
        

        【讨论】:

          【解决方案4】:

          试试下面的

          public static Stream ToStream(this Image image, ImageFormat formaw) {
            var stream = new System.IO.MemoryStream();
            image.Save(stream);
            stream.Position = 0;
            return stream;
          }
          

          那么你可以使用下面的

          var stream = myImage.ToStream(ImageFormat.Gif);
          

          【讨论】:

          • System.Drawing.Image 在 Silverlight 中不可用
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-07-04
          • 1970-01-01
          相关资源
          最近更新 更多