Windows 8 Store Applicationプログラミング(基本編) 14

画像に各種フィルタを適用して保存するWindowsアプリを作る(3ページ目)

※前ページからの続きです。

[グレースケール]ボタンがクリックされた時の処理

 Private Async Sub grayButton_Click(sender As Object, e As RoutedEventArgs) Handles grayButton.Click
  Dim myBmp = Await GetTestImageAsync()
  mySource = myBmp.EffectGrayscale
  Image1.Source = mySource
  saveButton.IsEnabled = True
End Sub

[ネガティブ]ボタンがクリックされた時の処理

  Private Async Sub negativeButton_Click(sender As Object, e As RoutedEventArgs) Handles negativeButton.Click
    Dim myBmp = Await GetTestImageAsync()
    mySource = myBmp.EffectNegative
    Image1.Source = mySource
    saveButton.IsEnabled = True
  End Sub

[セピア]ボタンがクリックされた時の処理

  Private Async Sub sepiaButton_Click(sender As Object, e As RoutedEventArgs) Handles sepiaButton.Click
    Dim myBmp = Await GetTestImageAsync()
    mySource = myBmp.EffectSepia
    Image1.Source = mySource
    saveButton.IsEnabled = True
  End Sub

[Saturation]ボタンがクリックされた時の処理

  Private Async Sub SaturationButton_Click(sender As Object, e As RoutedEventArgs) Handles SaturationButton.Click
    Dim myBmp = Await GetTestImageAsync()
    mySource = myBmp.EffectSaturation(1.0)
    Image1.Source = mySource
    saveButton.IsEnabled = True
  End Sub

[Vignetting]ボタンがクリックされた時の処理

  Private Async Sub VignettingButton_Click(sender As Object, e As RoutedEventArgs) Handles VignettingButton.Click
    Dim myBmp = Await GetTestImageAsync()
    mySource = Await myBmp.EffectVignettingAsync(1.0) 'エラー
    Image1.Source = mySource
    saveButton.IsEnabled = True
  End Sub

[Toycamera]ボタンがクリックされた時の処理

  Private Async Sub ToycameraButton_Click(sender As Object, e As RoutedEventArgs) Handles ToycameraButton.Click
    Dim myBmp = Await GetTestImageAsync()
    mySource = Await myBmp.EffectToycameraAsync
    Image1.Source = mySource
    saveButton.IsEnabled = True
  End Sub

[Posterize]ボタンがクリックされた時の処理

  Private Async Sub PosterizeButton_Click(sender As Object, e As RoutedEventArgs) Handles PosterizeButton.Click
    Dim myBmp = Await GetTestImageAsync()
    mySource = myBmp.EffectPosterize(255)
    Image1.Source = mySource
    saveButton.IsEnabled = True
  End Sub

[コントラスト]ボタンがクリックされた時の処理

  Private Async Sub contrastButton_Click(sender As Object, e As RoutedEventArgs) Handles contrastButton.Click
    Dim myBmp = Await GetTestImageAsync()
    mySource = myBmp.EffectContrast(1.0)
    Image1.Source = mySource
    saveButton.IsEnabled = True
  End Sub

[Effect適用後の画像保存]ボタンがクリックされた時の処理

SaveAsyncメソッドで、「画像のフォーマット」「保存する場所」「ファイル名」「画像の幅」「画像の高さ」を指定して保存します。ここでは、PNGファイル形式で、ピクチャライブラリ内に、現在の年月日時間分秒のファイル名で保存しています。
[一覧]ボタンの使用を可能にします。

非同期で処理がなされるため、メソッドの先頭にAsyncを追加します。

  Private Async Sub saveButton_Click(sender As Object, e As RoutedEventArgs) Handles saveButton.Click
    Dim myBmp = DirectCast(Image1.Source, WriteableBitmap)
    Await myBmp.SaveAsync(ImageFormat.Png, ImageDirectories.PicturesLibrary, DateTime.Now.ToString("yyyyMMddHHmmss"), 640, 480)
    ichiranButton.IsEnabled = True
    messageTextBlock.Text = "Picturesフォルダに保存しました。"
  End Sub

[一覧]ボタンがクリックされた時の処理

ピクチャライブラリにアクセスします。GetFileAsyncメソッドでピクチャライブラリ内の画像を取得し、コレクション変数myPictureFilesに格納しておきます。

ListBox内を一度クリアします。クリアしないと、画像が重複して表示されてしまいます。

画像ファイル名を格納しているコレクション変数myPictureFiles内のファイル名を、変数myFileに格納しながら反復処理を行います。

BitmapImageの新しいインスタンスbmpオブジェクトを作成します。SetSourceメソッドにAwait myFile.OpenReadAsyncと指定して、ファイルを開きます。

新しいImageのインスタンスmyImageオブジェクトを作成します。
WidthとHeightを指定します。
Sourceプロパティにbmpオブジェクトを指定します。
ListBoxにAddメソッドでmyImageオブジェクトを追加します。これで、ListBox内に、ピクチャライブラリに保存された、エフェクトのかかった画像の一覧が表示されます。

非同期で処理がなされるため、メソッドの先頭にAsyncを追加します。

  Private Async Sub ichiranButton_Click(sender As Object, e As RoutedEventArgs) Handles ichiranButton.Click
    Dim myPictureFolder = KnownFolders.PicturesLibrary
    Dim myPictureFiles As IReadOnlyList(Of IStorageFile) = Await myPictureFolder.GetFilesAsync()
    ListBox1.Items.Clear()
    For Each myFile In myPictureFiles
      Dim bmp As New BitmapImage
      bmp.SetSource(Await myFile.OpenReadAsync)
      Dim myImage As New Image
      myImage.Width = 320
      myImage.Height = 240
      myImage.Source = bmp
      ListBox1.Items.Add(myImage)
    Next
  End Sub
End Class

今回でWindows Store Applicationプログラミング(基本編)の解説を終わります。如何だったでしょうか?Windows Store Applicationプログラミングは、コードも比較的短く、使用するメソッド等も、名前から何に使用するメソッドであるかの判断が付きやすく、意外と敷居の低いプログラミングではないかと思います。

この連載を参考にして、ぜひ面白くて独創的なWindows Store Applicationの作成にトライしてください。

では、ありがとうございました。

PROJECT KySS 薬師寺国安

この記事をシェアしてください

人気記事トップ10

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