首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从服务器显示、下载和保存jpeg图像到Windows Phone 8相机胶卷

从服务器显示、下载和保存jpeg图像到Windows Phone 8相机胶卷
EN

Stack Overflow用户
提问于 2014-02-27 20:49:15
回答 1查看 795关注 0票数 0

我正在尝试从特定的URL检索图像,将其显示在我的图像框中,最后将其保存到我的相机胶卷中。这就是我所尝试的,但我得到了一个目标调用异常。这说明了什么?

代码语言:javascript
复制
private void downloadImg()
    {
        String uri = "http://timenewsfeed.files.wordpress.com/2013/12/doge.jpg";
        Uri imgUri = new Uri(uri, UriKind.Absolute);
        ImageSource imgSource = new BitmapImage(imgUri);

        Dispatcher.BeginInvoke(() =>
        {
            imageBox.Source = imgSource;
        }
        );
            using (var mediaLibrary = new MediaLibrary())
            {
                using (var stream = new MemoryStream())
                {
                    Debug.WriteLine("trying to save photo...");
                    var fileName = "HELLOWORLD.jpg";
                    BitmapImage img = new BitmapImage(imgUri);
                    img.CreateOptions = BitmapCreateOptions.None;
                    img.ImageOpened += (s, e) =>
                    {
                        WriteableBitmap bmp = new WriteableBitmap((BitmapImage)s);
                        bmp.SaveJpeg(stream, bmp.PixelWidth, bmp.PixelHeight, 0, 100);
                    };
                    stream.Seek(0, SeekOrigin.Begin);
                    Dispatcher.BeginInvoke(() =>
                    {
                        var picture = mediaLibrary.SavePicture(fileName, stream);
                    });
                    // or to cameraroll
                    Debug.WriteLine("photo saved");
                }
            }

    }
EN

回答 1

Stack Overflow用户

发布于 2014-02-27 21:49:52

我发现你的代码中至少有一个潜在的问题。我看到的主要问题是在你的方法中执行事物的顺序,当你试图保存它时,这可能会导致流为空。您对填充流的ImageOpened进行了处理,但该回调是异步执行的。换句话说,这就是

代码语言:javascript
复制
stream.Seek(0, SeekOrigin.Begin);
Dispatcher.BeginInvoke(() =>
  {
      var picture = mediaLibrary.SavePicture(fileName, stream);
  });

可能会在此之前执行

代码语言:javascript
复制
WriteableBitmap bmp = new WriteableBitmap((BitmapImage)s);
bmp.SaveJpeg(stream, bmp.PixelWidth, bmp.PixelHeight, 0, 100);

如果您将保存逻辑上移到ImageOpened处理程序,则可能会解决此问题。所以你会有像这样的东西...

代码语言:javascript
复制
img.ImageOpened += (s, e) =>
  {
      WriteableBitmap bmp = new WriteableBitmap((BitmapImage)s);
      bmp.SaveJpeg(stream, bmp.PixelWidth, bmp.PixelHeight, 0, 100);

      stream.Seek(0, SeekOrigin.Begin);
      Dispatcher.BeginInvoke(() =>
      {
          var picture = mediaLibrary.SavePicture(fileName, stream);
      });
  };
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22069027

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档