SHOEISHA iD

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

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

ImageGearを利用して高度な画像処理を手軽に実装する

ImageGearを利用して高度な画像処理を手軽に実装する(実装編)

コンポーネントを利用して画像処理アプリケーションを作成する 後編

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

プログラムコードを追加しよう

 コンポーネントの貼り付けが終わって、これであと半分の道のりです。続いてプログラムコードの記述に移ります。まず、プログラムコードの入力の手間を減らすため、名前空間を宣言しておきましょう(リスト1)。これで、わざわざ長い名前を入力する必要がなくなります。

リスト1 - 名前空間の宣言
Imports GearCORELib
Imports GearDIALOGSLib
Imports GearDISPLAYLib
Imports GearFORMATSLib
Imports GearPROCESSINGLib
Imports GearVIEWLib

 そして、フォーム全体で利用する変数の宣言です(リスト2)。

リスト2 - フォーム全体で利用する変数の宣言
Private m_IGFileDlg As IGFileDlg
Private m_DlgLoadOptions As IIGFileDlgDocumentLoadOptions

Private m_IGPage As IGPage
Private m_IGDocument As IGDocument
Private m_IGPageDisplay As IGPageDisplay

 フォームがロードされたら、いろいろな初期化処理を行います(リスト3)。

リスト3 - フォームのロードイベント
Private Sub Form1_Load( _
    ByVal sender As System.Object, _
    ByVal e As System.EventArgs _
  ) Handles MyBase.Load

    AxIGCoreCtl1.License.SetSolutionName( _
      "AccuSoft 1-100-15")

    AxIGCoreCtl1.AssociateComponent( _
      AxIGFormatsCtl1.ComponentInterface)
    AxIGCoreCtl1.AssociateComponent( _
      AxIGFormatsCtl1.ComponentInterface)
    AxIGCoreCtl1.AssociateComponent( _
      AxIGDisplayCtl1.ComponentInterface)
    AxIGCoreCtl1.AssociateComponent( _
      AxIGProcessingCtl1.ComponentInterface)

    AxIGDlgsCtl1.GearCore = _
      AxIGCoreCtl1.ComponentInterface
    AxIGDlgsCtl1.GearFormats = _
      AxIGFormatsCtl1.ComponentInterface
    AxIGDlgsCtl1.GearDisplay = _
      AxIGDisplayCtl1.ComponentInterface

    m_IGFileDlg = AxIGDlgsCtl1.CreateFileDlg()
    m_IGPage = AxIGCoreCtl1.CreatePage()

  End Sub

 ここで行っている処理を、順に見ていきましょう。

 ImageGearのコンポーネントを使ったアプリケーションでは、必ずソリューション名を指定しなくてはいけません。上記のとおり、「AccuSoft 1-100-15」と指定します。ImageGearをコールするアプリケーションを配布するためには固有のソリューション名その他のランタイムデータが必要です。このランタイムデータは、開発キットを購入し開発用ライセンスを取得するときにプロトンから通知されます。

 それから、コアコンポーネントと、それ以外の各コンポーネントの関連付けです。このアプリケーションでは、ダイアログを表示してファイルを選択しますが、そのダイアログの準備もしておきましょう。コアコンポーネントとの関連付け、さらに、フォーマット、ディスプレイの各コントロールと関連付けを行います。それらの処理が終わったら、CreateFileDlg()メソッドで新しい「ファイルを開く」ダイアログのインスタンスを生成します。最後に、ファイルを表示するためのページを作成しておきます。このページに、選択した画像が表示されることになります。

 メニューの処理も記述していきます。[ファイル]-[開く]メニューでは、まず、ダイアログオプションを指定します。今回は「ドキュメントを開く」処理なので、IG_FILEDLGOPTIONS_DOCLOADOBJを指定することになります。さらに、オプションを指定して、実際にダイアログを表示します。ここで、ファイルが選ばれたときは、Trueが返ることになります。その場合には、処理を続行します。

 ドキュメントを作成し、選択されたファイルをドキュメントに読み込みます。ドキュメントは複数のページを持っていますが、通常のJPEGファイルなどでは、ページは1枚だけです。ファイルフォーマットによっては、複数のページを持つものもあります。ページから、表示用のページディスプレイオブジェクトを生成します。生成したページディスプレイオブジェクトをビューアに設定し、ビューアを更新して、画像を表示します。

リスト4 - ファイルを開く処理
Private Sub tsmiOpen_Click( _
    ByVal sender As System.Object, _
    ByVal e As System.EventArgs _
  ) Handles tsmiOpen.Click

    m_DlgLoadOptions = _
      AxIGDlgsCtl1.CreateFileDlgOptions( _
        enumIGFileDlgOptionsType.IG_FILEDLGOPTIONS_DOCLOADOBJ)

    If m_IGFileDlg.Show(m_DlgLoadOptions) Then

      m_IGDocument = _
        AxIGCoreCtl1.CreateDocument(0)
      With m_DlgLoadOptions
        AxIGFormatsCtl1.LoadDocumentFromFile( _
          m_IGDocument, _
          .FileName, _
          .StartPage, _
          .Position, _
          -1)
      End With

      m_IGPage = m_IGDocument.Page(0)
      m_IGPageDisplay = _
        AxIGDisplayCtl1.CreatePageDisplay(m_IGPage)

      AxIGPageViewCtl1.PageDisplay = m_IGPageDisplay

    End If

    AxIGPageViewCtl1.UpdateView()

End Sub

 これでビューアとしての基本機能は完成です。いくつか機能を付け加えていくことにしましょう。

 リスト5では、表示した画像を回転する処理を行っています。処理の内容ですが、Rotate90k()メソッドによって、ページを90°ずつ回転します。これを複数回処理することによって、90°ずつ、一回転させることも可能です。

リスト5 - 表示した画像を回転させる処理
Private Sub tsmiRotate_Click( _
    ByVal sender As System.Object, _
    ByVal e As System.EventArgs _
  ) Handles tsmiRotate.Click

    AxIGProcessingCtl1.Rotate90k( _
      m_IGPage, _
      enumIGRotationValues.IG_ROTATE_90)

    AxIGPageViewCtl1.UpdateView()

End Sub

 さらに、画像を縮小したり、拡大したりする機能も付け加えてみましょう。現在のサイズ/幅/高さに合わせた縮小・拡大処理を行います。また、実際の画像の大きさに戻す処理も行います。それぞれの処理で違うところは、Layout.FitModeに設定している値だけです。いったん、自前で用意したResetZoom()メソッドを呼び出して、縮小・拡大を初期化してから、Layout.FitModeプロパティにそれぞれの値を設定します。最後に、表示を更新して、この処理は完了します。

リスト6 - 縮小・拡大処理
Private Sub tsmiFitDevice_Click( _
    ByVal sender As System.Object, _
    ByVal e As System.EventArgs _
  ) Handles tsmiFitDevice.Click

    ResetZoom()
    m_IGPageDisplay.Layout.FitMode = _
      enumIGDsplFitModes.IG_DSPL_FIT_TO_DEVICE

    AxIGPageViewCtl1.UpdateView()

End Sub

Private Sub tsmiWidth_Click( _
    ByVal sender As System.Object, _
    ByVal e As System.EventArgs _
  ) Handles tsmiWidth.Click

    ResetZoom()
    m_IGPageDisplay.Layout.FitMode = _
      enumIGDsplFitModes.IG_DSPL_FIT_TO_WIDTH

    AxIGPageViewCtl1.UpdateView()

End Sub

Private Sub tsmiHeight_Click( _
    ByVal sender As System.Object, _
    ByVal e As System.EventArgs _
  ) Handles tsmiHeight.Click

    ResetZoom()
    m_IGPageDisplay.Layout.FitMode = _
      enumIGDsplFitModes.IG_DSPL_FIT_TO_HEIGHT

    AxIGPageViewCtl1.UpdateView()

End Sub

Private Sub tsmiFitActual_Click( _
    ByVal sender As System.Object, _
    ByVal e As System.EventArgs _
  ) Handles tsmiFitActual.Click

    ResetZoom()
    m_IGPageDisplay.Layout.FitMode = _
      enumIGDsplFitModes.IG_DSPL_ACTUAL_SIZE

    AxIGPageViewCtl1.UpdateView()

End Sub

 縮小・拡大処理で、それぞれ呼び出す処理を自前の関数にしておきました。ResetZoom()関数です。ここで行っている処理は、現在の縮小・拡大情報(ズーム情報)を取得し、Modeプロパティの値を、幅、高さ共に初期状態に設定するというものです。UpdateZoomFrom()メソッドによって、初期状態となったズーム情報を設定します。

リスト7 - 縮小・拡大されている画像をもとに戻す処理
Private Sub ResetZoom()
    Dim zoom As IGDisplayZoomInfo

    zoom = _
      m_IGPageDisplay.GetZoomInfo(AxIGPageViewCtl1.hWnd)

    zoom.Mode = _
      enumIGDsplZoomModes.IG_DSPL_ZOOM_H_NOT_FIXED Or _
      enumIGDsplZoomModes.IG_DSPL_ZOOM_V_NOT_FIXED

    m_IGPageDisplay.UpdateZoomFrom(zoom)

End Sub

おわりに

 今回は、ImageGear v15のコンポーネントを利用して、かんたんなイメージファイルビューアを作成してみました。メソッドをいくつか呼び出すだけで、お手軽に実現できることが理解していただけたと思います。もちろん、ImageGearのコンポーネントが持つ機能は、これだけではありません。その素晴らしさを体験するためにも、ぜひ一度試してみてください。その優れた機能を実感してもらえると思います。

 期間限定20%OFFキャンペーンを実施中です(2008年3月25日受付分まで)。評価版を無料で提供しておりますので、お早目のご検証をお勧めいたします。

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

  • このエントリーをはてなブックマークに追加
ImageGearを利用して高度な画像処理を手軽に実装する連載記事一覧
この記事の著者

こだかかおる(コダカカオル)

Microsoft Most Valuable Professional Visual Developer - Visual C# .NETによるアプリケーション開発を中心に、IT全般について何でもやるソフトウェアエンジニア。更新をさぼりがちなWebサイトはこちら(http://www.antoine.st/)。

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

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

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/2173 2008/01/29 00:00

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング