xamarin 无法在“图像”视图中显示AppDataDirectory中的图像

k3bvogb1  于 2023-02-17  发布在  其他
关注(0)|答案(2)|浏览(155)

当我的.net maui应用程序启动时,它会从云中加载一些图像并存储到FileSystem.AppDataDirectory文件夹。然后在离线模式下,它应该从文件夹中获取这些图像以显示在图像视图中,但代码不起作用(将使用绑定,但为了演示起见,它是硬编码的):

<Image WidthRequest="30" HeightRequest="30">
        <Image.Source>
            <FileImageSource File="/data/user/0/mytestapp/files/Icontest.svg" />
        </Image.Source>
    </Image>

当我将文件源替换为URL源时,如果从云中加载,相同的图像工作正常。
/data/user/0/mytestapp/files/FileSystem.AppDataDirectory调用返回的内容,我只是在末尾添加了文件名
你知道它是否支持从文件夹中加载图像文件吗?
注意:缓存url源不满足应用程序的要求。

ar7v8xwq

ar7v8xwq1#

SVG是预先渲染的,并随应用程序一起提供。您必须在XAML中将其作为PNG引用。(在IOS上,如果您使用. svg,它甚至不会显示)但这不是它。
一旦用PNG替换了SVG资源,就会遇到另一个问题。
Android会将您的文件缓存到您的文件系统中,您对此无能为力:https://github.com/dotnet/maui/issues/9773
有两种解决方法:
1.每次都更改文件名,这样就不会找到它。
1.通过删除此处的所有内容来清除缓存:Path.Combine(FileSystem.CacheDirectory, "image_manager_disk_cache");
我认为这两种变通办法的负面影响都很明显。祈祷明年能修好。

6yt4nkrj

6yt4nkrj2#

Image控件最初无法直接从设备外部存储中获取文件,使用FileImageSource获取项目中设置为嵌入式资源的图像文件。
所以你可能需要使用流来读取文件,然后使用ImageSource.FromStream来设置图像源。例如:

var memoryStream = new MemoryStream();
using (var source = System.IO.File.OpenRead(path))
{
   source.CopyTo(memoryStream);
}
image.Source = ImageSource.FromStream(() => memoryStream)

但是ImageSource is not work when set Image.Source to file in external storage有一个bug,即使已经将图像文件作为流读取,图像也不会显示,大家可以在github上跟进这个问题。

相关问题