3

StorageFile に保存されている画像のコンテンツをバインディングを介して表示したいのですが、何をしようとしてもうまくいかないようです。

私がすでにテストした2つのソリューションは次のとおりです。

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 をバインドされたプロパティに返します。

これらの方法はどれも機能しません..

誰にもアイデアはありますか?

編集:修正

問題を解決したコードは次のとおりです。

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

上記の 2 つのサンプルを組み合わせて作成しました: 画像の絶対 URI から bitmapImage を作成しました (LOCAL_REPOSITORY にはローカル ストレージへの参照が含まれていますApplicationData.Current.LocalFolder:)

他の2つの方法が失敗した理由をまだ理解できません.通常、画像をUri、文字列、またはBitmapImageに直接バインドします..

4

1 に答える 1

9

次のコードは、アプリで loadimage メソッドを使用する方法を示しています。空のアプリを作成し、イメージとボタンをメイン ページに追加します。

    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;

    }
于 2013-02-15T21:38:12.017 に答える