摘要

在对vs进行环境配置好以后,就可以开始与halcon联合进行实战。本篇就对图像的采集进行总结。通过构建采集相机GrabImage类的三个方法实现图像的采集:

  • open() 打开相机
  •  grabimage() 单次采集图像
  • close() 关闭相机,释放内存

最后用IrisSkin4实现WinForm窗体换皮肤。


 先看一下实现的效果:

vs联合halcon——采集图像(实时采集与单次采集)-LMLPHP

 🧡🧡🧡🧡🧡如何实现呢?


 一,创建vs工程,创建 GrabImage类(便于调用)


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using HalconDotNet;

namespace 采集图像
{
   public class GrabImage
    {
        HTuple hv_AcqHandle; //打开相机窗口的引用句柄
        HObject ho_Image;//定义图片变量
        HTuple imageWidth, imageHeight;//定义宽高

        public void open()
        {
            try
            {

                HOperatorSet.GenEmptyObj(out ho_Image);// 初始化本地图像空间的变量
                //打开本地相机
                HOperatorSet.OpenFramegrabber("DirectShow", 1, 1, 0, 0, 0, 0, "default", 8, "rgb",
                    -1, "false", "default", "[0] Integrated Camera", 0, -1, out hv_AcqHandle);
                //开始采集图像
                HOperatorSet.GrabImageStart(hv_AcqHandle, -1);
            }
            catch (Exception)
            {

                System.Windows.Forms.MessageBox.Show("打开相机失败!");//报错
            }

        }
        //构造单次采集图像方法
        public void grabimage(HWindowControl HW)
        {

            //清空窗体halconwindows
            HW.HalconWindow.ClearWindow();
            //采集图像
            HOperatorSet.GrabImageAsync(out ho_Image, hv_AcqHandle, -1);
            //转成黑白图像
            HOperatorSet.Rgb1ToGray(ho_Image, out ho_Image);
            //图片自适应窗口
            HOperatorSet.GetImageSize(ho_Image, out imageWidth, out imageHeight);
            HOperatorSet.SetPart(HW.HalconWindow, 0, 0, imageHeight - 1, imageWidth - 1);
            //显示图像
            HOperatorSet.DispObj(ho_Image, HW.HalconWindow);
            //以当前日期保存图像到D盘下
            //HOperatorSet.WriteImage(ho_Image, "png", 0, "D:\\" + DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss"));
            ho_Image.Dispose();

        }
        //关闭相机,释放内存
        public void close()
        {
            ho_Image.Dispose();
            HOperatorSet.CloseFramegrabber(hv_AcqHandle);


        }
    }
}

 二,编写winform界面


vs联合halcon——采集图像(实时采集与单次采集)-LMLPHP


 三,编写主窗体Form1程序


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace 采集图像
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

        }
        GrabImage grabimg = new GrabImage();//实例化GrabImage类

        private void Form1_Load(object sender, EventArgs e)
        {
            skinEngine1.SkinFile = System.Environment.CurrentDirectory+ "\\Skins\\Calmness.ssk";
            skinEngine1.DisableTag = 8888;//设置不自动换肤。tag的值8888(默认9999)
            grabimg.open();//调用open方法
        }

        private void button1_Click(object sender, EventArgs e)
        {
            grabimg.grabimage(hWindowControl1);
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            grabimg.close();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            grabimg.grabimage(hWindowControl2);

        }
        //实时采集
        private void button2_Click(object sender, EventArgs e)
        {
            timer1.Start();
        }
        //停止采集
        private void button3_Click(object sender, EventArgs e)
        {
            timer1.Stop();
        }
    }
}

这里利用了一个timer控件将单次采集变成实时采集(累加计时)。

💜💜💜💜💜那么如何修改winform界面皮肤呢?

  1. 下载IrisSkin4.dll以及皮肤包
  2. 解压。将IrisSkin4.dll与Skins(皮肤)一起拷贝到项目的\bin\Debug文件夹下
  3. 在程序的资源管理器中的【引用】上单击右键,选择【添加引用】,找到刚才复制过来的IrisSkin4.dll文件,点击【确定】
  4. 点击菜单栏中的【工具】——>【选择工具箱项——>【.NET Framework组件】——>【浏览】——>找到IrisSkin4.dll——>点击【确定】,SkinEngine控件加入到工具箱 把控件添加进程序的主窗体(最简单的方法就是直接把IrisSkin4.dll文件用鼠标拖动到【浏览】界面即可)
  5. 在主窗体的构造函数中编辑一行代码选择皮肤,即可完成渲染。
skinEngine1.SkinFile = System.Environment.CurrentDirectory+ "\\Skins\\Calmness.ssk";

 如果有需要IrisSkin4.dll以及皮肤包,可在下方评论留言。

06-27 13:36