将远程映像保存到隔离存储

tri*_*kui 7 c# silverlight windows-phone-7

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

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);
                }
            }
        }
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

Mat*_*ira 5

在隔离存储中获取流文件很容易.IsolatedStorageFile有一个OpenFile方法获得一个.

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


小智 5

在方法内部e.Result调用时,需要将其作为参数PicToIsoStoreclient_DownloadStringCompleted

void client_DownloadStringCompleted(object sender,
     DownloadStringCompletedEventArgs e)
        {
           PicToIsoStore(e.Result);
        }
Run Code Online (Sandbox Code Playgroud)

WebClient类获取响应并将其存储在e.Result变量中.如果仔细观察,e.Result的类型已经存在,Stream因此可以将其传递给您的方法PicToIsoStore


Pan*_*kaj 0

尝试以下操作

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

然后你可以使用下面的

var stream = myImage.ToStream(ImageFormat.Gif);
Run Code Online (Sandbox Code Playgroud)