为什么在 Xamarin Media 插件中使用 ImageSource.FromStream 而不是 FromFile?

3
我正在使用James Montemagno的Xamarin Media Plugin(https://github.com/jamesmontemagno/MediaPlugin),他的用例示例显示通过以下方式更新从拍摄的照片中捕获的图像:
        targetImage.Source = ImageSource.FromStream(() =>
        {
            var stream = file.GetStream();
            file.Dispose();
            return stream;
        });

这似乎同样有效:

        targetImage.Source = ImageSource.FromFile(file.Path);

然而,我觉得James的示例必须展示了更好的方法,但是我无法理解为什么--可能是在某个平台上有一些微妙的东西。有人能告诉我为什么Xamarin ImageSource应该设置一种方式而不是另一种方式吗?

1个回答

3
选择使用FromFile()FromStream()的原因取决于手头的用例。此外,所使用的方法取决于数据类型,如此处所述。
虽然FromFile()需要一个指向路径字符串,但FromStream()需要一个Func<System.IO.Stream>
在你提到的特定案例中,即这个示例中,返回一个Stream是合理的,因为拍摄的照片尚未存储。
首先调用TakePhotoAsync(),它返回一个MediaFile。当调用GetStream()时,该类随后返回一个Stream。之后,将ImageSource设置为结果。
实质上,你选择的方法取决于手头的用例和数据类型。

1
我之后进行了相当多的实验。此外,由于某种原因,Xamarin PCL似乎无法轻松访问文件。Xamarin提供了一个示例应用程序,需要3个本地实现和可能超过50行的代码才能编写文本文件 Xamarin工作文件。也许流比文件名更好跟踪...... - Alex G
1
那也很有可能。如果你需要更多的帮助,随时联系我。 - Demitrian
FWIW: "Xamarin提供了一个需要3个本地实现的示例应用程序..." 本地代码中没有涉及文件读取。SaveAndLoadText.cs是相关的文件。所需的实际行是string fileName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "temp.txt"); - 获取移动应用程序可以写入的位置,File.WriteAllText(fileName);File.ReadAllText(fileName); - ToolmakerSteve

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接