平常使用C#和halcon进行联合开发,一定会有要显示图片的地方,halcon显示图片的控件有两个HWindowControl和HSmartWindowControl。HWindowControl控件一直都有,而HSmartWindowControl是在halcon18之后才有的,个人觉得HSmartWindowControl会更加方便,更加好用。接下来介绍一些使用方法:
1、显示图片
1.1、图片充满控件显示
这种显示方式是比较常见的显示,但是有一个缺点就是图片会被拉伸至和HSmartWindowControl控件一样大小,有些时候会导致图片变形。
public void DispImage(HObject image, HWindow hWindow)
{
// 获取图像尺寸
HOperatorSet.GetImageSize(image, out HTuple width, out HTuple height);
// 设置 Halcon 图像显示尺寸,图像会铺满 Halcon 控件
HOperatorSet.SetPart(hWindow, 0, 0, height - 1, width - 1);
// 显示图像
HOperatorSet.DispObj(image, hWindow);
}
1.2、图片保持宽高比显示
这种显示方式可以使图片在 HSmartWindowControl控件里保持正常的宽高比,图片不会被拉伸变形,就跟双击控件后实现的效果一样。
public void DispFullImage(HObject image, HSmartWindowControl hSmartWindowControl)
{
// 获取图像尺寸
HOperatorSet.GetImageSize(image, out HTuple width, out HTuple height);
// 设置 Halcon 图像显示尺寸,一般来说,图像会铺满 Halcon 控件,因此会有一定程度拉伸
HOperatorSet.SetPart(hSmartWindowControl.HalconWindow, 0, 0, height - 1, width - 1);
// 显示图像
HOperatorSet.DispObj(image, hSmartWindowControl.HalconWindow);
// 设置原图像比例缩放,这个效果和双击左键效果一样
hSmartWindowControl.SetFullImagePart();
}
2、鼠标实现放大缩小
显示图片之后再很多情况下我们都需要放大缩小图片查看细节, HSmartWindowControl自带有函数可以实现,只要和鼠标滚轮进行绑定即可。
private void hSmartWindowControl1_MouseWheel(object sender, MouseEventArgs e)
{
try
{
MouseEventArgs newe = new MouseEventArgs(e.Button, e.Clicks, e.X - Location.X, e.Y - Location.Y, e.Delta);
if (hSmartWindowControl1.RectangleToScreen(hSmartWindowControl1.ClientRectangle).Contains(MousePosition))
{
hSmartWindowControl1.HSmartWindowControl_MouseWheel(sender, newe);
}
}
catch (Exception ex)
{
}
}
在初始化的时候进行绑定
private void Form1_Load(object sender, EventArgs e)
{
MouseWheel += hSmartWindowControl1_MouseWheel;
}