笔记:C# Halcon之HSmartWindowControl:鼠标定点缩放、Region操作、比例显示

开始

以前用的是HWindowControl控件,显示的平移缩放都是自己处理。听说过HSmartWindowControl控件,有空看了一下,觉得比HWindowControl简单,而且AttachDrawingObjectToWindow功能不错,halcon自己维护了HDrawingObject对象,可以用鼠标移动和调整不需要写代码重绘,省心。

一,鼠标定点缩放

1,在Form上加入HSmartWindowControl控件

2,手动加上Form的滚轮处理

public Form1()
{
	...
   	MouseWheel += Form1_MouseWheel;
  	 ...
}
//
public void Form1_MouseWheel(object sender, MouseEventArgs e)
{
	//HSmartWindowControl控件的区域
    Rectangle rect = hSmartWindowControl1.RectangleToScreen(hSmartWindowControl1.ClientRectangle);
    //滚动时,鼠标悬停在在HSmartWindowControl控件上
    if (rect.Contains(Cursor.Position))
    {
    	//缩放
        hSmartWindowControl1.HSmartWindowControl_MouseWheel(sender, e);
    }
}
//显示原图
private void buttonRefresh_Click(object sender, EventArgs {
    if (image != null)
    {
        HOperatorSet.GetImageSize(image, out HTuple Width, out HTuple Height);
        hSmartWindowControl1.HalconWindow.SetPart(0, 0, Height.D - 1, Width.D - 1);
        hSmartWindowControl1.HalconWindow.DispObj(image);
    }
}

在这里插入图片描述
在这里插入图片描述

二,画Region

1,定义用于在HSmartWindowControl控件上显示Region的HDrawingObject实例

HDrawingObject doRoi = null;

2,建立和删除HDrawingObject

private void buttonGenRoi_Click(object sender, EventArgs e)
{
    if (doRoi == null)
    {
    	//创建一个矩形的显示实例
        doRoi = HDrawingObject.CreateDrawingObject(HDrawingObject.HDrawingObjectType.RECTANGLE1, 100, 100, 210, 210);
        doRoi.SetDrawingObjectParams("color", "green");
        //挂靠实例到HSmartWindowControl控件
        hSmartWindowControl1.HalconWindow.AttachDrawingObjectToWindow(doRoi);
    }
    else
    {
        hSmartWindowControl1.HalconWindow.DetachDrawingObjectFromWindow(doRoi);//这里这句可以不要
        doRoi = null;
    }
}

在这里插入图片描述

3,HDrawingObject转Region

        private void buttonFindLed_Click(object sender, EventArgs e)
        {
            if (doRoi != null)
            {
            	//获取矩形参数
                string[] str = { "row1", "column1", "row2", "column2" };
                HTuple val = doRoi.GetDrawingObjectParams(str);
                
				//生成ROI
                HOperatorSet.GenRectangle1(out HObject  roi, val[0], val[1], val[2], val[3]);
                ...
            }
        }

三,比例满窗口显示

1,代码

void showImage(HObject image)
  {
      if (image == null)
          return;

	  //获取图像及显示窗口长宽
      HOperatorSet.GetImageSize(image, out HTuple imgWidth, out HTuple imgHeight);
      int wndWidth = hSmartWindowControl1.ClientRectangle.Width;
      int wndHeight = hSmartWindowControl1.ClientRectangle.Height;

	  //计算比例
      double scale = Math.Max(1.0*imgWidth.I / wndWidth, 1.0*imgHeight / wndHeight);
      double w = wndWidth * scale;
      double h = wndHeight * scale;
      //居中时,Part的区域
      hSmartWindowControl1.HalconWindow.SetPart(-(h-imgHeight)/2, -(w - imgWidth) / 2, imgHeight+(h- imgHeight.D)/2, imgWidth + (w - imgWidth) / 2);

	  //背景色
      hSmartWindowControl1.HalconWindow.SetWindowParam("background_color", "blue");
      hSmartWindowControl1.HalconWindow.ClearWindow();
      
      hSmartWindowControl1.HalconWindow.DispObj(image);
	  //画根测试线
      HOperatorSet.GenRegionLine(out HObject line, 0, 0, imgHeight, imgWidth);
      hSmartWindowControl1.HalconWindow.SetColor("green");
      hSmartWindowControl1.HalconWindow.DispObj(line);
  }

2,示图,不同长宽比的图,都显示在窗口中部

在这里插入图片描述
在这里插入图片描述
图太大了,不知道怎么缩小 -_-!!!

  • 7
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: "hsmartwindowcontrol" 可能是指智能窗户控制系统。 智能窗户控制系统是指利用先进的技术,对窗户进行自动化控制,使其具备智能化、自动化的功能。这种控制系统可以通过遥控、手机APP等方式进行远程操控,方便用户随时随地控制窗户的开启、关闭、调节窗户通风、隔热等功能。此外,智能窗户控制系统还可以通过传感器实时监测室内外环境温度、湿度等参数,自动调节窗户的开合程度,达到节能降耗的目的。 总之,智能窗户控制系统是一种实用、智能的智能家居设备,能够带来更加便捷、节能、安全的生活体验。 ### 回答2: hsmartwindowcontrol指的是智能窗户控制系统。智能窗户控制系统是一种能够自动控制和管理窗户开闭的技术。通过这个系统,用户可以实现对窗户的遥控操作,调节和管理窗户的开闭状态。 智能窗户控制系统具有以下功能:首先,它可以根据环境条件智能调节窗户的开闭状态。例如,系统可以根据温度、湿度等感知相应数据,并根据设定的条件自动开启或关闭窗户,为室内提供适宜的环境。 其次,智能窗户控制系统可以通过远程控制实现窗户的开闭。用户可以通过手机APP或者远程控制器随时随地控制窗户的开关,方便快捷。比如,在离家前可以通过远程控制窗户关闭,保证室内的安全。 此外,智能窗户控制系统还可以与其他智能家居设备相结合,实现联动操作。例如,当智能灯光系统感知到室内光照不足时,可以自动打开窗户,增加室内的采光。 总的来说,智能窗户控制系统通过自动调节窗户的开闭状态,提供了便利和舒适的居住体验。它不仅可以智能化管理窗户的开闭,还可以与其他智能设备形成联动,增加家居的智能化程度,提升用户的生活质量。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值