显示存储在metroapp存储文件中的图片

本文关键字:存储文件 存储 metroapp 显示 | 更新日期: 2023-09-27 17:59:08

我想通过绑定显示存储在StorageFile中的图片的内容,但无论我试图做什么,似乎都不起作用。

以下是我已经测试过的两种解决方案:

string img =( await CompetencesFolder.GetFileAsync(FormatImageNameToFileName(imageName))).Path;

然后通过绑定将获得的路径(文件的完整绝对路径)返回到源属性,并:

 BitmapImage img = await LoadImage(await CompetencesFolder.GetFileAsync(FormatImageNameToFileName(imageName)));
  private static async Task<BitmapImage> LoadImage(StorageFile file)
        {
            BitmapImage bitmapImage = new BitmapImage();
            FileRandomAccessStream stream = (FileRandomAccessStream)await file.OpenAsync(FileAccessMode.Read);
            bitmapImage.SetSource(stream);

            return bitmapImage;
        }

稍后将最终位图图像返回到绑定的属性。

这些方法都不起作用。。

有人有主意吗?

编辑:修复

以下是解决问题的代码:

BitmapImage img = new BitmapImage() { UriSource = new Uri( LOCAL_REPOSITORY.Path + "/Assets/gfx/cards/" + FormatImageNameToFileName(imageName) + ".jpg", UriKind.RelativeOrAbsolute) };

我混合了上面的两个示例:我从图片的绝对URI创建了位图图像(LOCAL_REPOSITORY包含对本地存储的引用:ApplicationData.Current.LocalFolder

我仍然不明白为什么其他两种方法失败了:我通常直接将我的图像绑定到Uri、字符串或BitmapImage,而且它很有效。。

显示存储在metroapp存储文件中的图片

下面的代码展示了如何在应用程序中使用loadimage方法:创建一个空白应用程序,向主页面添加一个Image和一个Button。

    private async void  Button_Click_1(object sender, RoutedEventArgs e)
    {
        // load file from document library. Note: select document library in capabilities and declare .png file type
        string filename = "Logo.png";
        Windows.Storage.StorageFile sampleFile = await Windows.Storage.KnownFolders.DocumentsLibrary.GetFileAsync(filename);
        // load file from a local folder
        //Windows.Storage.StorageFile sampleFile = sampleFile = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFileAsync("Assets''Logo.png");
        BitmapImage img = new BitmapImage();
        img = await LoadImage(sampleFile);
        myImage.Source = img;
    }
    private static async Task<BitmapImage> LoadImage(StorageFile file)
    {
        BitmapImage bitmapImage = new BitmapImage();
        FileRandomAccessStream stream = (FileRandomAccessStream)await file.OpenAsync(FileAccessMode.Read);
        bitmapImage.SetSource(stream);
        return bitmapImage;
    }