SHOEISHA iD

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

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

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

「LEADTOOLS」を使ってWindowsストアアプリに画像処理機能を実装しよう

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

図形フィルター機能を追加する

 LEADTOOLSコンポーネントで画像を表示できました。ここまでの手順は通常のImageコンポーネントを使った場合と比較しても、大きな違いはありません。

 しかし、それが重要なのです。大差ない手順で準備ができたLEADTOOLSコンポーネントが威力を発揮するのは、画像表示のコードができたあとに必要になってくるところからです。

 それでは、画像にエフェクトをかける処理を追加してみましょう。表示領域を変形したり回転させたりするのはXAMLの機能で可能ですが、「エッジを抽出する」という課題であれば、どうすればよいでしょうか。

 この課題の解決を標準機能だけで行うのは大変ですが、LEADTOOLSコンポーネントを使用すると、あらかじめ用意されている豊富なフィルター機能に「EdgeDetectEffect」も存在するため、コードを少し追加するだけで解決できます。

画像作成時にエフェクト適用

 LEADTOOSの機能を適用する場所としては、RasterImageを作成するときに変換してしまう方法があります。

リスト6 コンストラクタへの追記
Dim workImage = Await codecs.LoadAsync(leadStream)
Dim command As New Leadtools.ImageProcessing.Effects.EdgeDetectEffectCommand(
    2,
    10,
    Leadtools.ImageProcessing.Effects.EdgeDetectEffectCommandType.Solid)
command.Run(workImage)
Me.RasterElement = workImage

 LoadAsyncしたものをパブリックプロパティに設定する前に、LEADTOOLSのEdgeDetectEffectCommandを使ってエッジを抽出する処理を行います。これでパブリックプロパティには、エッジを抽出した画像が設定できます。

図11 実行結果
図11 実行結果

コンバーターを使ってエフェクト適用

 画像作成時に変換してしまう方法は、試しにフィルターをかけたいときやデザイン担当者側でエフェクトを選定したい時などには不向きです。

 そこで提案したいのが、XAMLのコンバーターを使ってMainPage.xaml側でエフェクトをかけてしまう方法です。

 PictureModelに施した変更を元に戻してから、コンバーターを作成します。

リスト7 コンバーターの作成
Imports Leadtools.ImageProcessing
 
Namespace Converter
    Public Class ImageConverter
        Implements IValueConverter
 
        Public Function Convert(value As Object,
                                targetType As Type,
                                parameter As Object,
                                language As String) As Object _
                            Implements IValueConverter.Convert
            If TypeOf value Is Leadtools.RasterImage Then
                Dim orignal = CType(value, Leadtools.RasterImage)
                Dim command As New Effects.EdgeDetectEffectCommand(
                    2,
                    10,
                    Effects.EdgeDetectEffectCommandType.Solid)
                command.Run(orignal)
                Return orignal
            Else
                Return value
            End If
        End Function
 
        Public Function ConvertBack(value As Object,
                                    targetType As Type,
                                    parameter As Object,
                                    language As String) As Object _
                                Implements IValueConverter.ConvertBack
            Throw New NotImplementedException
        End Function
    End Class
End Namespace

 コンバーターが作成できたら、MainPage.xamlにコンバーターを適用します。

図12 コンバーターの設定
図12 コンバーターの設定

 プロパティウィンドウでRasterImageViewerのImageプロパティ欄にある□をクリックして、[データバインディング作成]メニューを選択します。そして、コンバーター欄に「ImageConverter」を指定すれば設定完了です。

図13 コンバーターによるエフェクト
図13 コンバーターによるエフェクト

次のページ
ストア申請

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

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

もっと読む

この記事の著者

初音玲(ハツネアキラ)

 国内SIerのSEでパッケージ製品開発を主に行っており、最近は、空間認識や音声認識などを応用した製品を手掛けています。 個人的には、仕事の内容をさらに拡張したHoloLensなどのMRを中心に活動しています。 Microsoft MVP for Windows Development ブログ:http://hatsune.hatenablog.jp/

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

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

この記事をシェア

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

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング