画像の削除にあわせて自動的に並び替え+1つのサンプル
次に、ソリューションエクスプローラー内のMainWindow.xamlを展開して表示される、MainWindow.xaml.vbをダブルクリックしてリスト2のコードを記述します。
ロジックコードを記述する
リスト2 (MainWindow.xaml.vb)
Option Strict On
シーケンシャルとランダムアクセスのストリームの読み書きを提供するクラスの含まれる、Windows.Storage.Streams名前空間をインポートします。
Imports Windows.Storage.Streams
ネットワークで使用される多くのプロトコルに対し、単純なプログラミングインターフェースを提供するクラスの含まれる、System.Net名前空間をインポートします。
Imports System.Net
ファイル、フォルダ、およびアプリケーションの設定を管理するクラスの含まれる、Windows.Storage名前空間をインポートします。
Imports Windows.Storage
XMLドキュメントモデル(DOM)をサポートするクラスの含まれる、Windows.Data.Xml.Dom名前空間をインポートします。
Imports Windows.Data.Xml.Dom Public NotInheritable Class MainPage Inherits Page
[サーバーから画像を取得]ボタンがクリックされた時の処理
GridViewコントロール内をクリアしておきます。ドキュメントライブラリにアクセスします。「CountDownControlでカメラのシャッターを切る」の中でドキュメントライブラリに置いていたImageFileList.xmlをGetFileAsyncメソッドで取得し、ファイルを表す変数myXmlFileで参照しておきます。
ImageFileList.xmlには、「CountDownControlでカメラのシャッターを切る」サンプル内で、画像をサーバーにアップするごとに、アップした画像のファイル名が保存されています。
XMLドキュメントの読み込みと、解析の際に使用される設定の含まれる、XmlLoadSettingsクラスの新しいインスタンス、mySettingオブジェクトを作成します。DTDは含めないので、ProhibitDtdプロパティにFalseと指定します。外部エンティティ参照もしませんので、ResolveExternalsプロパティにFalseと指定します。
XmlDocumentクラスのLoadFromFileAsyncメソッドで、指定されたファイルからXMLドキュメントを非同期的に読み込みます。ドキュメントは指定された設定を使用して解析されます。
読み込んだXMLファイルのノードを取得します。SelectNodesメソッドで要素のノードリストを取得し、ImageElement変数で参照します。要素のノードの個数分反復処理を行います。ImageElement.Count-1としているのは、繰り返し変数iが0から始まるためです。
変数iに対応する要素を取得していきます。ElementAt(i)メソッドはiの位置にある要素を返すメソッドです。これでファイル名が順次取得されていきます。
「CountDownControlでカメラのシャッターを切る」でサーバーにアップしていたImageFileUploadのImageDataというフォルダ内のmyElement変数に該当する画像ファイル名を、変数myUrlに格納していきます。
HttpWebRequest.CreateHttpメソッドで、指定したURI文字列用に、新しいHttpWebRequestインスタンスを初期化します。HttpWenRequestクラスは、WebRequestクラスの HTTP 固有の実装を提供するクラスです。
MethodプロパティにGETを指定します。HttpWebRequestクラスのGetResponseAsyncメソッドで、インターネット要求への応答を非同期で受け取り、WebResponseクラスのmyResponse変数で参照します。WebResponseクラスは、URIからの応答を利用できるようにするクラスです。
WebResponseクラスのGetResponseStreamメソッドで、インターネットストリームからのデータストリームを取得し、Stream変数myStreamで参照します。
メモリーに保存される入出力ストリームデータへのランダムアクセスを提供するクラスである、InMemoryRandomAccessStreamの新しいインスタンスmyMemoryオブジェクトを作成します。
GetOutputStreamAt(0)メソッドで、ストリームの指定された場所の出力ストリームを取得し、IOutputStream型の変数myOutPutで参照します。IOutputStreamインターフェースは書きこまれる順次バイトストリームを表します。
RandomAccessStream.CopyAsyncメソッドで、ソースストリーム(myStream.AsInputStream)を、コピー先のストリーム(myOutPut)にコピーします。RandomAccessStreamクラスは、入出力ストリームデータへのランダムアクセスを提供するクラスです。AsInputStreamメソッドは、Windows ストアアプリ用の.NETマネージストリームを、Windowsランタイムの入力ストリームに変換します。
BitmapImageクラスの新しいインスタンス、bmpオブジェクトを作成します。SetSourceプロパティに出力ストリームを参照しているmyMemoryオブジェクトを指定します。Imageの新しいインスタンスmyImageオブジェクトを作成し、WidthとHeightを指定します。Sourceプロパティにbmpオブジェクトを指定し、GridViewにAddメソッドで追加します。これで、横一列にサーバーにアップしている画像の一覧が表示されます。
非同期で処理が行われるため、メソッドの先頭にAsyncを追加します。
Private Async Sub Button1_Click(sender As Object, e As RoutedEventArgs) Handles Button1.Click GridView1.Items.Clear() Dim myStorageFolder As StorageFolder = Windows.Storage.KnownFolders.DocumentsLibrary Dim myXmlFile As StorageFile = Await myStorageFolder.GetFileAsync("ImageFileList.xml") Dim mySetting As New XmlLoadSettings mySetting.ProhibitDtd = False mySetting.ResolveExternals = False Dim xmldoc = Await XmlDocument.LoadFromFileAsync(myXmlFile, mySetting) Dim ImageElement As XmlNodeList = xmldoc.SelectNodes("//画像名") For i As Integer = 0 To ImageElement.Count - 1 Dim myElement = ImageElement.ElementAt(i).InnerText Dim myUrl = "ユーザーのサーバー/ImageFileUpload/ImageData/" &myElement Dim myRequest As HttpWebRequest = HttpWebRequest.CreateHttp(myUrl) myRequest.Method = "GET" Using myResponse As WebResponse = Await myRequest.GetResponseAsync Using myStream As Stream = myResponse.GetResponseStream Dim myMemory As New InMemoryRandomAccessStream Dim myOutput As IOutputStream = myMemory.GetOutputStreamAt(0) Await RandomAccessStream.CopyAsync(myStream.AsInputStream, myOutput) Dim bmp As New BitmapImage bmp.SetSource(myMemory) Dim myImage As New Image myImage.Width = 640 myImage.Height = 480 myImage.Source = bmp GridView1.Items.Add(myImage) End Using End Using Next End Sub End Class
サーバーからの画像を取得するWindows8サンプルアプリ
画像が削除された際自動的に並び変わるWindows8サンプルアプリ
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- 顔認識APIを使って写真に黒縁メガネをかける
- CountDownControlを使ってカウントダウン後にカメラのシャッターを切る
- 画像の一覧表示と、ListBoxに表示されたYoutubeの再生を試す
- 国内ニュースの取得・表示と、人名から画像検索を行う2つのサンプルをつくる
- 場所と写真を記録するプログラムを作って思い出のシーンを保存しよう
- Webカメラで撮影した写真をセピア調に演出するアプリを作る
- ポップアップメニューから各種コントロールを表示する
- PCで撮影した写真を並べて最適な1枚を選べるプログラムをつくる
- タッチパネルでドラッグ&ドロップを使う汎用的なサンプル
- キャラクターが声で天気予報を教えてくれるアプリを作る