SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

現役エンジニア直伝! 「現場」で使えるコンポーネント活用術(LEADTOOLS)(AD)

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

  • X ポスト
  • このエントリーをはてなブックマークに追加

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を活用する際の一助となれれば幸いです。

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
現役エンジニア直伝! 「現場」で使えるコンポーネント活用術(LEADTOOLS)連載記事一覧

もっと読む

この記事の著者

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

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/10190 2017/07/11 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング