プロが教える店舗&オフィスのセキュリティ対策術

vb2005で LEADTOOLS 16.5J を使用して元画像よりトリミングするプログラムを作っています。

Private Sub RasterImageViewer1_MouseDown(ByVal sender As Object, _
ByVal e As System.Windows.Forms.MouseEventArgs) _
Handles theViewer.MouseDown
'クリックされた地点より、長さ150の正方形の座標を指定
Dim strRectangle As Rectangle = New Rectangle(e.X, e.Y, 150, 150)
'リージョンを作成
RasterImageViewer.Image.AddRectangleToRegion(Nothing, strRectangle, Leadtools.RasterRegionCombineMode.Set)
End Sub

画像をクリックすると、リージョン(トリミングする範囲の点線)の枠が表示されるのですが、
座標の左上(0,0)から離れれば離れるほど、クリックした地点より右下にずれてリージョンの枠が表示されてしまいます。

調べてみると、オフセットを調整する処理が必要らしいことは分かったのですが、
具体的にどうすれば良いのか分かりません。

ご伝授よろしくお願いします。

A 回答 (1件)

LEADTOOLSは使っていませんので、具体的な解決策は提示できませんが。



>座標の左上(0,0)から離れれば離れるほど
スケールのズレが原因の典型的な現象ですね。

画像をトリミングするトリミング枠が表示されるって事ですので、プログラムから数値指定するのは画像のスケール基準であるところのピクセル指定であることは間違いないと思います。
※もし関数仕様が上記推測でなければ、以下はそれに従って読み替えてください。

画面上でクリックして得られるポイント(クリック位置x,yの点)は、当然コントロールの画面上のピクセルです。

画像を拡大/縮小表示しているのであれば、当然ながらそれらのクリックしたポイントと、対応する画像上のポイント(トリミング開始位置)は異なります。

早い話、一旦画像表示の拡大/縮小を解除して実寸表示にして、テストしてみてください。
おそらく希望通りの動作になります。

拡大/縮小表示する際には、拡縮率が120%であれば、クリックされたポイントのx,yそれぞれ1.2倍に、80%であれば0.8倍にと指定してやれば、トリミング枠は希望通りの位置にくると思います。

>クリックした地点より右下にずれてリージョンの枠が表示されてしまいます。
今現在、拡大表示されている状態ですかね、たぶん。
    • good
    • 0
この回答へのお礼

ご指摘ありがとうございます。
拡大縮小率を考慮してやると上手くいきました。
ただ、画像を表示領域の中央に表示する場合や、画像が表示領域より大きい場合には少し補正する必要がありました。
現在、LEADTOOLSはトライアル版でプログラム作成を始めたばかりなのですが、このあたりの操作はあくまで手動なのですね・・・

お礼日時:2010/03/02 10:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!