はじめに
前回は、「LEADTOOLS 14.0J Raster Imaging Pro」のコンポーネントの1つ、Lead Mainコントロールを使って、画像にズーム、モザイク、コントラスト調整、ブレを施す画像処理プログラムをVisual Basic 6.0(以降、VB 6.0)で作成しました。今回は、そのプログラムに新しく次のような機能を追加します。
- マウスで選択した範囲を中心に画像を拡大する
- 拡大鏡を使って画像の一部を拡大する
- 別フォームを使ってエンボスやポスタライズという画像処理を施す
対象読者
VB 6.0を使ってプログラムを作ったことのある人が対象です。
必要な環境
- VB 6.0が使用できる環境
- LEADTOOLS 14.0J Raster Imaging Pro
プログラム実行時の注意事項
本稿のバイナリファイルを実行する場合は、必ずセットアッププログラムを実行してください。
GUIの作成
LEADTOOLS 14.0J Raster Imaging Proのコンポーネントに含まれる、LeadMainコントロールをツールボックスに組み込んでおいてください。
後は、画面にあるVisual Basicの各コントロール(今回は標準コントロール以外のコントロールも使用しています)をツールボックスに配置しておきます。
後は、次の画面にあるVisual Basicの各コントロールをツールボックスに配置しておきます(今回は標準コントロール以外のコントロールも使用しています)。

実装する機能
今回実装する機能は次のとおりです。
- 画像のズーム(拡大)を、マウスで選択した領域を中心に行う
- 拡大鏡
- エンボス
- ポスタライズ
これらは、いずれもLeadMainコントロールのメソッドで行うことができます。


フォーム変更とメニューの追加
フォームの[ズーム]パネルに、チェックボックスを1つ配置します。
また、次のメニューを追加しておきます。
メニュー名 | オブジェクト名 |
拡大鏡(&M) | IDMMag |
200% | IDM200 |
300% | IDM300 |
400% | IDM400 |
- | sepa |
キャンセル | DMCX |
特殊効果(&S) | DMEffect |
エンボス | DMEmboss |
ポスタライズ | IDMPoster |
そして、[拡大鏡(&M)]と[特殊効果(&S)]の2つだけ、[有効]のチェックを外しておきます。
変数の修正と追加
このプログラムでは、エンボスとポスタライズを別のフォームForm2
で画像に施すようにします。そのため、読み込んだ画像のファイル名を格納する変数fname
を、Form2
からも使えるようにDim
からPublic
に変更します。
また、Form2
はエンボスとポスタライズの2つの特殊効果で共有して使用するため、どちらのメニューが選ばれたのかを判別するString
型変数flag
を、同じくPublic
で宣言します。
'Dimから Publicに変更 Public fname As String '変数を追加 Public flag As String
選択した範囲を中心に拡大する機能
前回組み込んだズーム機能は、画像全体を拡大・縮小しました。今度は、マウスで選択した部分を中心に画像を拡大する機能を組み込んでみます。
この機能は、LeadMainコントロールの「ラバーバンド」という機能と、ZoomToRect
メソッドを使用します。
ラバーバンド(RubberBand)というのは、画像の上でマウスをドラッグした範囲を矩形で表示する機能です。LeadMainコントロールは、このラバーバンドを自動で作成する機能を持っており、選択範囲の座標位置を自動的に取得することができます。
それでは、ラバーバンドで選択された部分を中心に拡大するようにします。
まず、LeadMainコントロールのMouseDown
イベントプロシージャを作成します。そして、その中でAutoRubberBand
プロパティをTrueにします。これで、画像の中でラバーバンドを使うことができるようになります。
Private Sub LEAD1_MouseDown(Button As Integer, Shift As Integer, _ x As Single, y As Single) With LEAD1 .AutoRubberBand = True .MousePointer = 2 End With End Sub
拡大機能の実装
次に、ラバーバンドで選択された範囲を取得し、ここを中心に画像を拡大する処理を作成します。この操作は、LeadMainコントロールのMouseUp
イベントプロシージャで行います。
Private Sub LEAD1_MouseUp(Button As Integer, Shift As Integer, _ x As Single, y As Single)
まず、チェックボックスにチェックが入っている場合のみ、この処理を行うようにします。
If Check1.Value = 1 Then LEAD1.MousePointer = 0
そして、ラバーバンドで選択された範囲を、「RubberBand」で始まるプロパティから取得します。LeftとTopはラバーバンドの矩形の左上の座標、WidthとHeightは矩形の幅と高さです。
zoomleft = LEAD1.RubberBandLeft zoomtop = LEAD1.RubberBandTop zoomwidth = LEAD1.RubberBandWidth zoomheight = LEAD1.RubberBandHeight
ただし、ラバーバンドが適切に作られていない場合は拡大の処理ができないため、これを把握しておく必要があります。そして、正しくラバーバンドが作成されていることを確認した上で、ZoomToRect
メソッドを実行します。
If zoomleft <> 0 And zoomtop <> 0 And zoomwidth <> 0 And zoomheight <> 0 Then LEAD1.ZoomToRect zoomleft, zoomtop, zoomwidth, zoomheight LEAD1.ForceRepaint End If


拡大鏡機能の実装
拡大鏡は、画像の上を虫眼鏡アイコンで拡大して見てまわる機能です。LeadMainコントロールのStartMagGlass
メソッドで簡単に実現できます。拡大の倍率を引数に指定できるので、メニューを使って「2倍」「3倍」「4倍」の3つの拡大鏡を選択できるようにします。
まず、200倍の拡大鏡を作りましょう。この処理は、メニュー[200%]のClick
イベントプロシージャに作成します。

プロシージャの先頭で、選択したメニューにチェックマークをつけるようにします。これは、[300%][400%]も同じです。
Private Sub IDM200_Click() IDM200.Checked = True IDM300.Checked = False IDM400.Checked = False
そして、拡大鏡の設定を行います。最初に、前に選んだ拡大率が残っている場合もあるので、一度拡大鏡をStopMagGlass
メソッドでリセットします。
With LEAD1
.StopMagGlass
また、LeadMainコントロールのスケールモードを「ピクセル」に設定し、StartMagGlass
メソッドを実行します。
.ScaleMode = 3 .StartMagGlass 50, 50, 200, RGB(255, 0, 0), RGB(128, 128, 128), _ True, 1, False, CROSSHAIR_FINE, True, True
StartMagGlass
メソッドは、多くの引数を持ちますが、引数を詳しく説明するよりも、実際に引数の値を変えてメソッドを実行した方が、どの引数がどのような役割を果たしているのかがすぐに分かります。
ここでは、拡大鏡を赤色の線で描き、拡大率を200%にしています。
LEAD.StartMagGlass( fWidth!, fHeight!, nZoom%, clrPen&, clrBack&,bEllipse, fBorderSize!, b3D, nCrosshair%, bIgnoreRgn, bCenter )
引数 | 説明 |
fWidth! |
拡大鏡の幅(最小値は10ピクセル) |
fHeight! |
拡大鏡の高さ(最小値は10ピクセル) |
nZoom% |
拡大率(100以上 : 単位はパーセント) |
clrPen& |
拡大鏡の境界色 |
clrBack& |
範囲外の領域の表示色 |
bEllipse |
拡大鏡のカーソルの形 |
fBorderSize! |
拡大鏡の境界の幅(ピクセル) |
b3D |
長方形の拡大鏡の表現 |
nCrosshair% |
クロスラインの表示 |
bIgnoreRgn |
リージョンの拡大 |
bCenter |
拡大されたピクセルのセンタリング |
次は、300%の拡大鏡を作成します。最初に、メニューのチェックをつける処理を行い、StopMagGlass
メソッドで倍率をリセットして、StartMagGlass
メソッドの引数で拡大鏡を緑の線で描画し、300%の拡大率で実行します。
Private Sub IDM300_Click() IDM200.Checked = False IDM300.Checked = True IDM400.Checked = False With LEAD1 .StopMagGlass .ScaleMode = 3 .StartMagGlass 100, 100, 300, RGB(255, 0, 0), RGB(128, 128, 128), _ True, 1, False, CROSSHAIR_FINE, True, True End With End Sub
400%の拡大鏡も同様に作成します。StartMagGlass
メソッドの引数は、拡大鏡を青色の線で描画し、400%の拡大率にセットします。
Private Sub IDM400_Click() IDM200.Checked = False IDM300.Checked = False IDM400.Checked = True With LEAD1 .StopMagGlass .ScaleMode = 3 .StartMagGlass 150, 150, 400, RGB(255, 0, 0), RGB(128, 128, 128), _ True, 1, False, CROSSHAIR_FINE, True, True End With End Sub
最後に、拡大鏡機能を停止させる処理を[キャンセル]メニューに作成します。これは、メニューのチェックを3つとも外し、StopMagGlass
メソッドを実行するだけです。
Private Sub IDMCX_Click() IDM200.Checked = False IDM300.Checked = False IDM400.Checked = False LEAD1.StopMagGlass End Sub
Form2のデザインと初期化処理
エンボスとポスタライズ機能を組み込みますが、これらの処理は別フォームで行うようにします。
まず、今あるフォームの[特殊効果]-[エンボス]/[ポスタライズ]メニューのClick
イベントプロシージャに、それぞれ次のコードを記述します。
Private Sub IDMEmboss_Click() flag = "エンボス" Form2.Caption = "エンボス" Form2.Show End Sub Private Sub IDMPoster_Click() flag = "ポスタライズ" Form2.Caption = "ポスタライズ" Form2.Show End Sub
そして、プロジェクトにフォームを追加し、LeadMainコントロールをここにも配置します。また、スクロールバーコントロールとボタンを3つ配置します。
このフォームでは、エンボスとポスタライズの2つの効果を行うので、どちらの処理を実行するのかを変数flag
に代入した文字列で判別します。
フォームForm2
のLoad
イベントプロシージャでは、この変数の値を基に、Select Case
ステートメントを使って処理を分岐し、スクロールバーコントロールの動作範囲の設定とエフェクトの実施を行います。
操作対象の画像ファイルは、フォームForm1
のコードでPublic
宣言した変数fname
から取得します。
Private Sub Form_Load() Dim ret As Integer LEAD1.Load Form1.fname, 0, 0, 1 Select Case Form1.flag Case "エンボス" With HScroll1 .Max = 1000 .Min = 0 .SmallChange = 10 .LargeChange = 50 .Value = 500 End With ret = LEAD1.Emboss(EMBOSS_SW, HScroll1.Value) Case "ポスタライズ" With HScroll1 .Max = 64 .Min = 2 .SmallChange = 1 .LargeChange = 5 .Value = 2 End With ret = LEAD1.Posterize(HScroll1.Value) End Select End Sub
エンボスとポスタライズ機能の実装
エンボスとポスタライズの設定は、スクロールバーコントロールのChange
イベントプロシージャで行います。2つの特殊効果は、いずれもLeadMainコントロールのメソッドで行います。
Private Sub HScroll1_Change() Dim ret As Integer LEAD1.Load Form1.fname, 0, 0, 1 Select Case Form1.flag Case "エンボス" ret = LEAD1.Emboss(EMBOSS_SW, HScroll1.Value) Case "ポスタライズ" ret = LEAD1.Posterize(HScroll1.Value) End Select End Sub
エンボスはEmboss
メソッドを使い、引数に光源の方向を定数で指定して、浮き上がりの高さをもう1つの引数に設定します。
LEAD.Emboss( iDirection%, iDepth% )
iDirection%
……エッジの方向を次の定数で指定するiDepth%
……エッジの高さ(0~1000、普通の高さは500)
定数 | 説明 |
EMBOSS_N |
上 |
EMBOSS_NE |
右上 |
EMBOSS_E |
右 |
EMBOSS_SE |
右下 |
EMBOSS_S |
下 |
EMBOSS_SW |
左下 |
EMBOSS_W |
左 |
EMBOSS_NW |
左上 |
ポスタライズは、Posterize
メソッドを使用します。引数は1つで、色調を2~64の数値で指定します。いずれのメソッドも正常終了は0を、エラーは0以外の数値を返してきますので、戻り値を変数で受け取るようにします。
Form1への処理の転送
Form2
で特殊効果が決まったら、その値を使ってForm1
のLeadMainコントロールの画像にも、同じ設定で特殊効果を実施します。
Private Sub Command2_Click() Dim ret As Integer Select Case Form1.flag Case "エンボス" ret = Form1.LEAD1.Emboss(EMBOSS_SW, HScroll1.Value) Case "ポスタライズ" ret = Form1.LEAD1.Posterize(HScroll1.Value) End Select Unload Me End Sub

まとめ
LeadMainコントロールの多彩な機能の中から、いくつかの画像処理機能を実装したプログラムを作成してみました。
LeadMainコントロールには、まだまだ伝えきれないたくさんの機能が組み込まれていますので、アイデア次第で、もっといろいろなことが実現できるでしょう。