ピクチャライブラリへのアクセス許可の設定

ピクチャライブラリへのアクセス許可の設定

今回のサンプルは、ピクチャライブラリにアクセスしますので、「画像ライブラリ」へのアクセス許可が必要になります。ソリューションエクスプローラー内にpackage.appxmanifestというファイルがありますので、このファイルをダブルクリックします。「機能」タブをクリックして、表示される画面の「機能:」にある、「画像ライブラリ」にチェックを付けます(図7)。

図7:package.appxmanifest ファイルを開き「画像ライブラリ」にチェックを付ける(クリックで拡大)

次に、ソリューションエクスプローラー内のMainWindow.xamlを展開して表示される、MainWindow.xaml.vbをダブルクリックしてリスト2のコードを記述します。

ロジックコードを記述する

リスト2 (MainWindow.xaml.vb)

Option Strict On

System.Runtime.InteropServices.WindowsRuntime 名前空間には、マネージ コードおよび Windows ランタイムとの相互運用をサポートするクラスが含まれています。

Imports System.Runtime.InteropServices.WindowsRuntime

ファイル、フォルダー、およびアプリケーションの設定を管理するクラスの含まれる、Windows.Storage名前空間をインポートします。

Imports Windows.Storage

ユーザーがファイルを参照し、ファイルを開き、ファイルを保存する時、名前や拡張子、場所、を選択可能にするUI要素を管理するクラスの含まれる、Windows.Storage.Pickers名前空間をインポートします。

Imports Windows.Storage.Pickers

シーケンシャルとランダム アクセスのストリームの読み書きを提供するクラスの含まれる、Windows.Storage.Streams名前空間をインポートします。

Imports Windows.Storage.Streams

コーデック(データのエンコードとデコードを双方向に行うことができるソフトウエア)がインストールされている、任意の形式でのイメージファイルの、デコーディング、編集、およびエンコードが可能なクラスの含まれる、Windows.Graphics.Imaging名前空間をインポートします。

Imports Windows.Graphics.Imaging

コンテキスト メニューおよびメッセージ ダイアログ ボックスに関するクラスの含まれる、Windows.UI.Popups名前空間をインポートします。

Imports Windows.UI.Popups

Public NotInheritable Class MainPage
  Inherits Page

BitmapImageクラスの新しいインスタンスmyBmpメンバ変数を宣言します。

  Dim myBmp As New BitmapImage

ファイルを表すStorageFileクラスのメンバ変数myFileを宣言します。

  Dim myFile As StorageFile

WriteableBitmapクラス型のメンバ変数mySelectedImageを宣言します。

  Dim mySelectedImage As WriteableBitmap

ページがアクティブになった時の処理

画像ファイルを選択するSelectImageプロシージャを実行します。

  Protected Overrides Sub OnNavigatedTo(e As Navigation.NavigationEventArgs)
    SelectImage()
  End Sub

画像ファイルを選択する処理

FileOpenPickerクラスの新しいインスタンスmyFileOpenPickerオブジェクトを作成します。FileOpenPickerクラスは、ユーザーが選択し、ファイルを開くことのできるUI要素を表すクラスです。

ファイルの表示モードを指定するViewModeプロパティに、サムネイル表示を指定します。サムネイル表示のほかにリスト(List)表示があります。
ファイルを開く最初の場所を設定する、SuggestedStartLocationプロパティにPicturesLibrayを指定しておきます。
開くファイルタイプを指定するFileTypeFilter.Addで「アスタリスク」を指定して全てのファイルを指定しておきます。PNGファイルだけを指定する場合は、FileTyleFilter.Add(“.png”)と指定します。”*.png”ではないので注意してください。

PickSingleFileAsynメソッドで、ユーザーが1つのファイルを選択できるように、ファイルピッカーを表示し、変数myFileで参照します。変数myFileがファイルを参照している場合は、新しいBitmapImageクラスのインスタンスmyBmpオブジェクトのSetSourceメソッドにAwait myFile.OpenReadAsyncと指定して、ファイルの内容を読み込むために、現在のファイルを、ランダムアクセスストリームで開きます。

Image1のSourceプロパティにmyBmpオブジェクトを指定します。これで、ファイルピッカーで指定したファイルが表示されます。

非同期処理で行われるため、メソッドの先頭にAsyncを追加します。Asyncが追加されていると、その処理が非同期で行われることを意味します。

  Private Async Sub SelectImage()
    Dim myFileOpenPicker As New FileOpenPicker
    myFileOpenPicker.ViewMode = PickerViewMode.Thumbnail
    myFileOpenPicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary
    myFileOpenPicker.FileTypeFilter.Add("*")
    myFile = Await myFileOpenPicker.PickSingleFileAsync()
    If myFile Is Nothing = False Then
      myBmp.SetSource(Await myFile.OpenReadAsync)
      Image1.Source = myBmp
    End If
  End Sub

ドラッグした時の処理

RectangleのWidthとHeightを設定します。
e.Cumulative.Translation.Xとe.Cumulative.Translation.Yでx-y画面座標を取得します。
矩形で描かれたWidthとHeightの値を、RectangleのWidthとHeightの値に指定します。

  Private Sub ContentPanel_ManipulationDelta(sender As Object, e As ManipulationDeltaRoutedEventArgs) Handles ContentPanel.ManipulationDelta
    Rectangle1.Width = e.Cumulative.Translation.X
    Rectangle1.Height = e.Cumulative.Translation.Y
  End Sub

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30