【问题标题】:Saving image as StorageFile将图像保存为 StorageFile
【发布时间】:2014-05-20 08:59:50
【问题描述】:

我正在尝试保存使用 FileOpenPicker 选择的图像。 I am lunching this event when an image is selected

 async void  photoChooserTask_Completed(object sender, PhotoResult e)
{       
// get the file stream and file name           
                Stream photoStream = e.ChosenPhoto;    
                string fileName = Path.GetFileName(e.OriginalFileName);

  // persist data into isolated storage      
    StorageFile file = await ApplicationData.Current.LocalFolder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting);    
    using (Stream current = await file.OpenStreamForWriteAsync())    
    {     
        await photoStream.CopyToAsync(current);         
    }      
}         

但是这段代码会给我保存文件的长度返回 0

var properties = await file.GetBasicPropertiesAsync();
                i = properties.Size;

我在保存图像时做错了吗?

【问题讨论】:

  • 检查stackoverflow.com/questions/19886950/…这基本上是一样的。
  • 看到了但没有解决我的问题
  • 嗨,你没有做错任何事,一切正常,我已经测试过了。可能是问题不同,或者您在检查时犯了错误。请交叉检查它。在“i = properties.size”的下一行放置一个断点。
  • 更新您的问题并添加设置图像。源代码使其保持初始状态..然后它将对其他人有所帮助。

标签: windows-phone-8 storagefile


【解决方案1】:

您可能需要刷新流。

如果这不起作用,请添加一个断点并在复制后检查两个流的长度。他们平等吗?他们应该是。这两个流对象有什么可疑之处吗?

编辑

在您发布的图像上,我可以看到您使用 BitmapImage 的 SetSource 方法与您复制的相同 Stream。一旦你这样做了,流的位置将在最后,因为它刚刚被那个调用读取。

CopyToAsync 复制您调用它的 Stream 的当前位置之后的所有内容。由于位置在末尾,因为它只是被读取,所以 CopyToAsync 不会复制任何东西。

解决问题所需要做的就是将流的位置设置为 0。

【讨论】:

  • 我解决了。我删除了在页面上显示照片的代码,它可以工作。感谢您的帮助
  • 哦,我想我知道问题出在哪里了。我更新了我的答案,看看吧。
  • 我认为我的评论帮助你弄清楚了
  • 确实如此。对不起,我没有提到它,那不是故意的。 :)
猜你喜欢
  • 2016-10-16
  • 1970-01-01
  • 1970-01-01
  • 2011-10-25
  • 2012-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-16
相关资源
最近更新 更多