2016-05-30 3 views
0

UriからBitmapImageのImageSourceに変換するにはコンバータが必要です。私が使用している場合は、この:ハードドライブ(アセットではない)をポイントするUriをImageSourceに変換するには?

Uri dummyUri = new Uri(@"ms-appx:///Assets/EmptyImage.png"); 
return new BitmapImage(dummyUri); 

すべてが正常に動作しますが、私の「本当の」のURLがLocalStateフォルダの下のディレクトリのダウンロードにコピーされたファイルを指しています。ウリは:

file:///downloads/eni^mp270a^tablet test/DSC_5517.jpg 

私はこのフォーマットを動作させることはできません!助けていただければ幸いです。ファイルを開いたり読んだりする必要がありますか?私は変換メソッドを非同期にすることができないので、トリッキーになります。

答えて

0

私の '本当の' URLは、LocalStateフォルダの下のダウンロードディレクトリにコピーされるファイルを指しています。ウリは次のとおりです。ファイル:///ダウンロード/ ENI^mp270a ^タブレットテスト/ DSC_5517.jpg

私たちが知っているように、我々のアプリのローカルフォルダがLocalStateフォルダを命名され、我々はアプリのコードでは、このフォルダにアクセスすることができます後ろに。しかしUriはここでは正しくありません。問題は実際には "ローカルフォルダ内のファイルのパスを取得する方法"です。

StorageFile.Path | path propertyを使用すると、ファイルの完全なファイルシステムパスを取得できます。たとえばここでは、ファイルのUriから変換されたBitmapImageをすべて表示するためにListViewを使用しました。 URLはImageのソースとして直接使用できるので奇妙ですが、ここでは必要に応じてURLをBitmapImageに変換するコンバータを使用します。

<Page.Resources> 
    <local:UriToBitmapImageConverter x:Key="cvt" /> 
</Page.Resources> 

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="50" /> 
     <RowDefinition Height="Auto" /> 
    </Grid.RowDefinitions> 
    <Button Content="Get Picture" Click="Button_Click" /> 
    <ListView Grid.Row="1" ItemsSource="{x:Bind urlcollection}"> 
     <ListView.ItemTemplate> 
      <DataTemplate> 
       <Image Source="{Binding url, Converter={StaticResource cvt}}" Width="300" Height="300" /> 
      </DataTemplate> 
     </ListView.ItemTemplate> 
    </ListView> 
</Grid> 

背後にあるコード:

private ObservableCollection<ImageUri> urlcollection = new ObservableCollection<ImageUri>(); 

public MainPage() 
{ 
    this.InitializeComponent(); 
} 

private async void Button_Click(object sender, RoutedEventArgs e) 
{ 
    StorageFolder local = ApplicationData.Current.LocalFolder; 
    StorageFolder downloads = await local.GetFolderAsync("downloads"); 
    if (downloads != null) 
    { 
     var files = await downloads.GetFilesAsync(); 
     foreach (var file in files) 
     { 
      urlcollection.Add(new ImageUri { url = new Uri(file.Path) }); 
     } 
    } 
} 

Converterは、このようなものです:

public class UriToBitmapImageConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, string language) 
    { 
     var url = (Uri)value; 
     return new BitmapImage(url); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, string language) 
    { 
     throw new NotImplementedException(); 
    } 
} 

そしてImageUriクラスは単純です:

public class ImageUri 
{ 
    public Uri url { get; set; } 
} 
関連する問題