Windows8で、ユーザ/Picturesにあるファイルを扱ったときのメモ
だらけきった夏休みの最後にWindowsRTアプリ?を作ろうとした。
asyncとかawaitとか初めて見てビビったり、MessageBoxがMessageDialogになってるーとか思いつつ英語のリファレンスを読みながらやった。
最初は今まで通り.Netで作れると思ってたが、そういえばWindowsRTアプリは.NetでなくWinRT APIだったことを思い出して挫けかけてた。
ちょっと躓いて英語を読んだところを3つメモ
ピクチャにある写真を月ごとにグループ分けする
// class.Windows.Storage.KnownFolders.PictureLibrary でピクチャのフォルダ内を参照できる StorageFolder picFolder = KnownFolders.PicturesLibrary; // 写真の保存された月ごとにファイルをわける // ピクチャ内のいろんなフォルダに位置していてもわけてくれる StorageFolderQueryResult picResult = picFolder.CreateFolderQuery(CommonFolderQuery.GroupByMonth); // あとはForeachで月わけにした写真を扱った
取得するファイルをフィルタリングする
// オプションを設定し、クエリを実行するときの引数として与える QueryOptions option = new QueryOptions(CommonFolderQuery.GroupByMonth); option.FileTypeFilter.Add(".jpg"); option.FileTypeFilter.Add(".png"); option.FileTypeFilter.Add(".gif"); option.FileTypeFilter.Add(".bmp"); StorageFolder picFolder = KnownFolders.PicturesLibrary; StorageFolderQueryResult picResult = picFolder.CreateFolderQueryWithOptions(option); IReadOnlyList<StorageFolder> picList = await picResult.GetFoldersAsync();
アプリ以下に位置してない画像を表示する
// アプリ以下に位置してない画像ファイル StorageFile localFile; BitmapImage image = new BitmapImage(); // 読み込みのみで開く using (var stream = (FileRandomAccessStream)await localfile.OpenAsync(FileAccessMode.Read)) { // ImageSourceとして渡したりした image.SetSource(stream); }