Image Picker

Picker を使って画像を選択します。

前田稔の超初心者のプログラム入門

プログラムの説明

  1. Windows Store では、クライアントが知らないうちにファイルにアクセスされるのを防ぐために、直接アクセス出来るフォルダーは限られています。
    任意のハードディスクのファイルにアクセスするときは Picker を使ってクライアントがファイルを選択します。
    今回は Picker を使って選択した画像を Image コントロールに描画してみましょう。
  2. Windows10 & Visual Studio 2017 で新規プロジェクトを作成します。
    ページ先頭の画像を参考にして、ツールから Button と Image を張り付けてサイズを整えて下さい。
    Image のサイズは Height="500", Width="1000" にしています。
    プロジェクトの作成とツールの貼り付けは C# Store Application を参照して下さい。
  3. Button クリックにイベントハンドラ(Button_Click)を設定して下さい。
    MainPage.xaml.cs の ButtonClick に Picker を使って画像を選択するコードを書きます。
    using System;
    using System.Collections.Generic;
      ・・・
    using Windows.UI.Xaml.Navigation;
    using Windows.Storage.Pickers;
    using Windows.Storage;
    using Windows.Storage.Streams;
    using Windows.UI.Xaml.Media.Imaging;
      ・・・
            async private void ButtonClick(object sender, RoutedEventArgs e)
            {
                FileOpenPicker open = new FileOpenPicker();
                open.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
                open.ViewMode = PickerViewMode.Thumbnail;
    
                // Filter to include a sample subset of file types
                open.FileTypeFilter.Clear();
                open.FileTypeFilter.Add(".bmp");
                open.FileTypeFilter.Add(".png");
                open.FileTypeFilter.Add(".jpeg");
                open.FileTypeFilter.Add(".jpg");
                open.FileTypeFilter.Add(".gif");
    
                // Open a stream for the selected file
                StorageFile file = await open.PickSingleFileAsync();
    
                // Ensure a file was selected
                if (file != null)
                {
                    using (IRandomAccessStream fileStream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read))
                    {
                        // Set the image source to the selected bitmap
                        BitmapImage bitmapImage = new BitmapImage();
                        await bitmapImage.SetSourceAsync(fileStream);
                        image.Source = bitmapImage;
                    }
                }
             }
    
  4. Picker を使用するために幾つかの using が追加されています。
    ButtonClick() 関数に async を設定して下さい。
    async, await を指定すると、実行が終わるまで待ち合わせてくれます。
    bitmapImage に選択した画像を取得して、image.Source に設定します。
  5. Button をクリックすると、ウインドウエクスプローラと同様にフォルダーツリーから画像を選択することが出来ます。
    FileOpenPicker から「アニメーション GIF」の画像を選択すると自動的にアニメーションされました。

オープンダイアログとファイルピッカーとでは「すべてのファイル」の扱いが変わったようです。
オープンダイアログでは、拡張子に関係なくフォルダーに格納されている全ファイルが表示されました。
ファイルピッカーでは Add で加えられた拡張子を持つファイルだけが表示されます。

超初心者のプログラム入門(C# Frame Work)