SHOEISHA iD

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

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

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

画像処理ができるWindows Phoneアプリケーションを作ろう

~ComponentOne Studio for Windows Phoneを活用したアプリ例~

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

トリミング機能の実装

 範囲指定ができたらいよいよ次はトリミングの実装です。MainPage.xaml.vb(MainPage.xaml.cs)ではボタンがクリックされたらViewModelを経由してPictureModelのTrimメソッドを呼び出すようにコーディングされています。すべての処理はPictureModelクラスにあるので、PictureModelクラスの内容を見てみましょう。

リスト10-1 トリミング機能の実装例(Visual Basic)
Public Sub Trim(rect As SelectionSize)
    Dim sizeX As Integer = (Me.ActureSize.Width - (rect.Right + rect.Left))
    Dim sizeY As Integer = (Me.ActureSize.Height - (rect.Bottom + rect.Top))
    Dim crop As New C1.Phone.Imaging.C1Bitmap(sizeX, sizeY)
    Dim posX As Integer = (rect.Left - rect.ActureSize.Left)
    Dim posY As Integer = (rect.Top - rect.ActureSize.Top)

    crop.BeginUpdate()
    For row As Integer = 0 To sizeY - 1
        For col As Integer = 0 To sizeX - 1
            crop.SetPixel(col,
                          row,
                          Me.Item.GetPixel(col + posX,
                                           row + posY))
        Next
    Next
    crop.EndUpdate()
    Me.Item = crop
End Sub
リスト10-2 トリミング機能の実装例(C#)
public void Trim(SelectionSize rect)
{
    int sizeX = (int)(this.ActureSize.Width - (rect.Right + rect.Left));
    int sizeY = (int)(this.ActureSize.Height - (rect.Bottom + rect.Top));
    C1.Phone.Imaging.C1Bitmap crop = new C1.Phone.Imaging.C1Bitmap(sizeX, sizeY);
    int posX = (int)(rect.Left - rect.ActureSize.Left);
    int posY = (int)(rect.Top - rect.ActureSize.Top);

    crop.BeginUpdate();
    for (int row = 0; row <= sizeY - 1; row++)
    {
        for (int col = 0; col <= sizeX - 1; col++)
        {
            crop.SetPixel(col,
                row,
                this.Item.GetPixel(col + posX, 
                                   row + posY));
        }
    }
    crop.EndUpdate();
    this.Item = crop;
}

 残念ながらCopyコマンドのようにトリミング専用のコマンドは存在しませんが、ピクセル単位に取得と設定ができるGetPixelとSetPixelがあるので、この2つを使って必要なピクセルを1つずつ転記します。

図5 トリミング結果の例
図5 トリミング結果の例

 後はトリミング後のデータをSNSに投稿したりSkyDriveにアップしたりする機能をつければ、十分実用的なアプリに仕上がるでしょう。

まとめ

 今回は、C1DockPanel、C1Bitmap、C1ProgressBar、C1GestureListenerの4つを組み合わせて画像処理アプリを作成してみました。1つ1つ使うのも良いですが、このような形で組み合わせて使うことでさらに作りやすくなります。ぜひ、単独で利用するだけなく、複数のコントロールを組み合わせ、効率的な開発を実現してみてください。

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

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

もっと読む

この記事の著者

初音玲(ハツネアキラ)

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

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

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

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/6628 2012/06/21 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング