C#联合halcon开发实现窗口图像放大缩小移动功能

本文详细介绍了如何在C#环境下利用Halcon库,通过HWindowControl控件实现图像的放大、缩小和移动功能。通过封装HMouseDown、HMouseMove、HMouseUp、HMouseWheel四个鼠标事件,实现了图像的平移、缩放功能,同时提供了鼠标滚轮控制图像缩放的实现方法。此外,还展示了如何使用HSmartWindowControl控件简化移动功能的实现。
摘要由CSDN通过智能技术生成

1、使用halcon的控件HWindowControl,并为控件添加四个鼠标事件,HMouseDown、HMouseMove、HMouseUp、HMouseWheel。

对事件进行封装,方便后续多次调用。

1.1 创建一个CS文件,命名为 ImageOperation ,并定义两个HTuple变量,变量名为RowDown,ColDown。

/// <summary>
/// 鼠标嗯下时的横纵坐标
/// </summary>
HTuple RowDown, ColDown;

1.2 实现MouseWheel事件的封装:

/// <summary>
/// 图像放大缩小
/// </summary>
/// <param name="sender">窗口句柄</param>
/// <param name="e">操作类型</param>
/// <param name="image">图像</param>
public void MouseWheel(object sender, HMouseEventArgs e, HObject image)
{
   
   if (image.CountObj() > 0 || image != null)//必须有图的情况下使用
   {
   
       try
       {
   
           //窗口
           HWindowControl hWindowControl = sender as HWindowControl;
           HObject CurrImage = null;
           HOperatorSet.GenEmptyObj(out CurrImage);
           CurrImage = image.Clone();
           //放大倍数,当前鼠标选择的图像点坐标Row, Col,按下鼠标的左键还是右键:0-没按下,1-左键,2-中键,4-右键
           HTuple Zoom, Row, Col, Button;
           HTuple RowLeftUpper, ColumnLeftUpper, RowRightLower, ColumnRightLower, Ht, Wt, ImagePartRowLeftUp, ImagePartColLeftUp, ImagePartRowRightLow, ImagePartColRightLow;
           //鼠标向上滚动表示放大
           if (e.Delta > 0)
           {
   
               Zoom = 1.5;
           }
           //向下滚动缩小
           else
           {
   
               Zoom = 0.5;
           }
           //返回输出窗口中鼠标指针和鼠标按钮所按下的像素精确图像坐标,输出当前鼠标指针点的图像坐标以及按下的是鼠标左键还是右键,0是鼠标左键
           HOperatorSet.GetMposition(hWindowControl.HalconWindow, out Row, out Col, out Button);
           //Get part返回窗口中显示的图像部分的左上角和右下角

           //得到当前的窗口坐标,Row0:图像部分左上角的行索引,Column0:图像部分左上角的列索引,Row00:图像部分右下角的行索引,Column00:图像部分右下角的列索引
           HOperatorSet.GetPart(hWindowControl.HalconWindow, out RowLeftUpper, out ColumnLeftUpper, out RowRightLower, out ColumnRightLower);
           //显示的部分图像的高
           Ht = RowRightLower - RowLeftUpper;
           //显示的部分图像的宽
           Wt = ColumnRightLower - ColumnLeftUpper;
           //普通版halcon能处理的图像最大尺寸是32K*32K。如果无限缩小原图像,导致显示的图像超出限制,则会造成程序崩溃
           if (Ht * Wt < 32000 * 32000 || Zoom == 1.5)
           {
   
               //显示的放大或者缩小部分图像的左上角和右下角坐标
               ImagePartRowLeftUp = (RowLeftUpper + ((1 - (1.0 / Zoom)) * (Row - RowLeftUpper)));
               ImagePartColLeftUp = (ColumnLeftUpper + ((1 - (1.0 / Zoom)) * (Col - ColumnLeftUpper)));
               ImagePartRowRightLow = ImagePartRowLeftUp + (Ht / Zoom);
               ImagePartColRightLow = ImagePartColLeftUp + (Wt / Zoom);
               //设置部分显示图像
               HOperatorSet.SetPart
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值