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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】