プログラムコードを追加しよう
コンポーネントの貼り付けが終わって、これであと半分の道のりです。続いてプログラムコードの記述に移ります。まず、プログラムコードの入力の手間を減らすため、名前空間を宣言しておきましょう(リスト1)。これで、わざわざ長い名前を入力する必要がなくなります。
Imports GearCORELib Imports GearDIALOGSLib Imports GearDISPLAYLib Imports GearFORMATSLib Imports GearPROCESSINGLib Imports GearVIEWLib
そして、フォーム全体で利用する変数の宣言です(リスト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)。
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枚だけです。ファイルフォーマットによっては、複数のページを持つものもあります。ページから、表示用のページディスプレイオブジェクトを生成します。生成したページディスプレイオブジェクトをビューアに設定し、ビューアを更新して、画像を表示します。
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°ずつ、一回転させることも可能です。
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
プロパティにそれぞれの値を設定します。最後に、表示を更新して、この処理は完了します。
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()
メソッドによって、初期状態となったズーム情報を設定します。
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 V15