26、.NET与Halcon混合编程(缩放、平移)

1、get_image_size(Image : : : Width, Height)

    功能:获取图像的真实大小(不受放缩、平移影响)

    read_image (Image, 'fabrik')

get_image_size (Image, Width, Height)

    

2、get_part( : : WindowHandle : Row1, Column1, Row2, Column2)

    功能:获取图形窗口左上角、右下角坐标。

    read_image (Image, 'fabrik')

get_part (3600, Row1, Column1, Row2, Column2)

    

3、dev_set_part( : : Row1, Column1, Row2, Column2 : )

    功能:设置图形窗口左上角、右下角坐标。

    read_image (Image, 'fabrik')

dev_set_part (-120, -90, 600, 800)

*要显式调用显示算子才看到效果

dev_display (Image)

4、get_mposition( : : WindowHandle : Row, Column, Button)

    功能:该算子在HDevelop中无法运行,它的主要是在.NET编程中获取HWindowControl控件鼠标当前位置的

            素坐标。

    实例说明:

    在调用

 HOperatorSet.SetPart(hv_WindowHandle,-50, -50, 300, 400)

 HOperatorSet.ClearWindow(hv_WindowHandle)

HOperatorSet.DispObj(ho_Image12, hv_WindowHandle)

 

    若:

Private Sub HWindowControl1_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles HWindowControl1.MouseMove

       Me.Text = "(" + e.X.ToString + "," + e.Y.ToString + ")"

   End Sub 

    若:

    Private Sub HWindowControl1_MouseMove(ByVal sender As System.Object, ByVal e As

    System.Windows.Forms.MouseEventArgs) Handles HWindowControl1.MouseMove

 

Dim X As HTuple = Nothing

Dim Y As HTuple = Nothing

'像素精度

HOperatorSet.GetMposition(hv_WindowHandle, X, Y, 0)

'亚像素精度

'HOperatorSet.GetMpositionSubPix(hv_WindowHandle, X, Y, 0)

 

Me.Text = "(" + X.ToString + "," + Y.ToString + ")"

 

End Sub

    则:

5、get_mposition_sub_pix( : : WindowHandle : Row, Column, Button)

    功能:和4一样,但它提取的像素坐标为亚像素精度

一、绘制区域:

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

'p是一个布尔类型的变量,用于判断是绘制区域还是移动图像,下面代码表示绘制区域,所以想把它置为True,

'防止在鼠标按下时被认为执行移动图像操作

p = True

HWindowControl1.Focus()

Dim region As HObject = Nothing

Dim out_img As HObject = Nothing

HOperatorSet.SetColor(hv_WindowHandle, New HTuple("yellow"))

HOperatorSet.DrawRegion(region, hv_WindowHandle)

HOperatorSet.ReduceDomain(ho_GrayImage, region, out_img)

HOperatorSet.ClearWindow(hv_WindowHandle)

HOperatorSet.DispObj(out_img, hv_WindowHandle)

p = False

End Sub

二、移动图像

1、HWindowControl1.HMouseDown事件中记录初识当前鼠标在图像中的坐标,以及GetPart

Private Sub HWindowControl1_HMouseDown(ByVal sender As System.Object, ByVal e As HalconDotNet.HMouseEventArgs) Handles HWindowControl1.HMouseDown

'p是一个布尔类型的变量,用于判断是绘制区域还是移动图像

If p = False And e.Button = Windows.Forms.MouseButtons.Left Then

HWindowControl1.Cursor = System.Windows.Forms.Cursors.NoMove2D

 

HOperatorSet.GetMposition(hv_WindowHandle, X1, Y1, 1)

Label1.Text = "(" + X1.ToString + "," + Y1.ToString + ")"

HOperatorSet.GetPart(hv_WindowHandle, row1, column1, row2, column2)

End If

End Sub

2、HWindowControl1.HMouseUp事件中记录移动后的鼠标在图像中的坐标,再根据移动前后的坐标差值

    调用SetPart来平移图像

Private Sub HWindowControl1_HMouseUp(ByVal sender As System.Object, ByVal e As HalconDotNet.HMouseEventArgs) Handles HWindowControl1.HMouseUp

'p是一个布尔类型的变量,用于判断是绘制区域还是移动图像

If p = False And e.Button = Windows.Forms.MouseButtons.Left Then

HOperatorSet.GetMposition(hv_WindowHandle, X2, Y2, 1)

Label2.Text = "(" + X2.ToString + "," + Y2.ToString + ")"

Dim t1 As Integer = X1 - X2

Dim t2 As Integer = Y1 - Y2

Label3.Text = t1.ToString

 

HOperatorSet.ClearWindow(hv_WindowHandle)

HOperatorSet.SetPart(hv_WindowHandle, row1 + t1, column1 + t2, row2 + t1, column2 + t2)

HOperatorSet.DispObj(ho_Image12, hv_WindowHandle)

HWindowControl1.Cursor = System.Windows.Forms.Cursors.Default

End If

 

End Sub

三、缩放图像

原理:先获取原图像的大小(GetPart),若鼠标滚轮向上滑动,则它大小变为原来的0.9倍,若向下滑动,则变为1.1倍。

Private Sub HWindowControl1_HMouseWheel(ByVal sender As System.Object, ByVal e As HalconDotNet.HMouseEventArgs) Handles HWindowControl1.HMouseWheel

 

HOperatorSet.GetPart(hv_WindowHandle, row1, column1, row2, column2)

If e.Delta > 0 Then

row1 = row1 * 0.9

column1 = column1 * 0.9

row2 = row2 * 0.9

column2 = column2 * 0.9

HOperatorSet.ClearWindow(hv_WindowHandle)

HOperatorSet.SetPart(hv_WindowHandle, row1, column1, row2, column2)

HOperatorSet.DispObj(ho_Image12, hv_WindowHandle)

ElseIf e.Delta < 0 Then

HOperatorSet.ClearWindow(hv_WindowHandle)

HOperatorSet.SetPart(hv_WindowHandle, row1 * 1.1, column1 * 1.1, row2 * 1.1, column2 * 1.1)

HOperatorSet.DispObj(ho_Image12, hv_WindowHandle)

End If

End Sub

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @   ihh2021  阅读(1993)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示