Shoeisha Technology Media

CodeZine(コードジン)

記事種別から探す

スマホの画像をOneDriveにアップして共有・編集するWPFアプリを作る

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2017/07/11 14:00
目次

OneDriveと連携し、画像共有・編集が可能なWPFアプリ(2)

OneDriveから取得した画像を変換する

 続いてOneDriveから取得した画像をLEADTOOLSを用いて変換する処理を実装します。

 シナリオとしては変換した画像を再びOneDriveにアップロードするのですが、先ほどのスマートフォン側の処理と同じ処理になるため割愛します。

 画像の変換はパソコンでの作業を想定しWPFアプリケーションを作成します。

ルートフォルダの画像一覧を取得する

 OneDriveの認証処理は先述のUWPとほぼ同じですが、今回は認証後、OneDriveのルートフォルダにある画像の一覧を取得します。

画像の一覧を取得する
if (currentFolder.Folder != null && currentFolder.Children != null && currentFolder.Children.CurrentPage != null)
{
    listupImage(currentFolder.Children.CurrentPage);
}
画像の一覧を取得する(listupImageメソッド)
private void listupImage(IList<DriveItem> items)
{
    var imageList = items.Where(item => item.Name.EndsWith(".jpg"));

    foreach(var tmpImage in imageList)
    {
        imageListBox.Items.Add(tmpImage.Name);
    }
}

 currentFolderはOneDriveのルートフォルダを表すクラスで、Children.CurrentPageプロパティからルートフォルダ以下のファイルとフォルダの一覧を取得します。CurrentPageはIList<DriveItem>というDriveItemクラスのリストになっているので、そのなかからファイル名の末尾が「.jpg」のものをListBoxに表示しています。

画像一覧を取得
画像一覧を取得

画像をダウンロードする

 一覧で選択した画像をダウンロードして表示します。

画像の一覧を取得する(listupImageメソッド)
foreach(var folder in this.currentFolder.Children.CurrentPage)
{
    if (if (folder.Name.Equals(fileName)))
    {
        var stream = await this.graphClient.Drive.Items[folder.Id].Content.Request().GetAsync();

        var imageSource = new BitmapImage();
        imageSource.BeginInit();
        imageSource.StreamSource = stream;
        imageSource.EndInit();

        this.image.Source = imageSource;
    }
}

 画像は「this.graphClient.Drive.Items[folder.Id].Content.Request().GetAsync();」で取得するこができます。

画像の取得
画像の取得

画像を変換する

 取得した画像はLEADTOOLSのさまざまな画像処理機能を利用して変換することができます。今回はグレイスケール変換を行うGrayscaleCommandを利用します。

画像を変換する
RasterImage tempImage = RasterImageConverter.ConvertFromSource(this.image.Source, ConvertFromSourceOptions.None);

// ここではグレイスケールを適応している。
// その他のエフェクトについてはサンプルのImageProcessingDemoを参照
// デモはC:\LEADTOOLS 19\Examples\以下にインストールされている
GrayscaleCommand command = new GrayscaleCommand();
command.BitsPerPixel = 8;
command.Run(tempImage);

this.changedImage.Source = RasterImageConverter.ConvertToSource(tempImage, ConvertToSourceOptions.None);

 取得した画像はRasterImage型に変換することで、各種変換が利用可能です。

 グレイスケールはGrayscaleCommandを用いて変換します。

画像の変換
画像の変換

 この後、画像をOneDriveにアップロードし、アップロードした画像を再びスマートフォンやタブレットで取得すれば、会議に利用するような急ぎの場合などでも、変更を指示した画像をすぐ編集、クラウドで共有して活用することができるでしょう。

 最後の閲覧処理で必要になる実装はこれまで紹介したサンプルと重複するので割愛いたしますが、新しくアプリケーションを作らずともスマートフォンのOneDriveアプリなどでも要件を満たせると思います。

まとめ

 ここまでLEADTOOLSの導入と、サンプルを実行する方法とドキュメントについて紹介しました。LEADTOOLSについて、どのような機能があるかもっと詳しく知りたい場合はこれらを活用すると良いでしょう。

 また、サンプルとしてOneDriveと連携したアプリケーションのサンプルを紹介しました。Xamarinを利用することで、UWP、Android、iOSから利用可能な点も.NET開発の利点です。LEADTOOLSを利用したWPFアプリケーションも紹介しました。LEADTOOLSを用いた画像変換がシンプルなコードで実現できることがお伝えできたと思います。

 本記事がLEADTOOLSを活用する際の一助となれれば幸いです。



  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • 西村 誠(ニシムラ マコト)

     Microsoft MVP Windows Platform Development。  Flash、PHPの開発経験もあり国産ECサイト構築フレームワーク「EC-CUBE」の公式エバンジェリストでもある。  ブログ:眠るシーラカンスと水底のプログラマー  著書:基礎から学ぶ Windows...

バックナンバー

連載:現役エンジニア直伝! 「現場」で使えるコンポーネント活用術(LEADTOOLS)
All contents copyright © 2005-2017 Shoeisha Co., Ltd. All rights reserved. ver.1.5