//定义图片变量
HObject ho_imageCamera;
//窗口句柄
HTuple hv_AcqHandle=null;
HTuple hv_windowsID;
public void iniCamera()
{
HOperatorSet.GenEmptyObj(out ho_imageCamera);
//销毁图像,不然造成内存泄漏
ho_imageCamera.Dispose();
//开窗口
HOperatorSet.OpenWindow(0, 0, hWindowControl1.Width, hWindowControl1.Height, hWindowControl1.HalconWindow, "", "",out hv_windowsID);
//开启相机
HOperatorSet.OpenFramegrabber("DirectShow", 1, 1, 0, 0, 0, 0, "default", 8, "rgb",
-1, "false", "default", "HP HD Camera", 0, -1, out hv_AcqHandle);
//抓取图像
HOperatorSet.GrabImage(out ho_imageCamera, hv_AcqHandle);
//得到图像的尺寸大小
HTuple hv_width,hv_height;
HOperatorSet.GetImageSize(ho_imageCamera,out hv_width,out hv_height);
//设置窗口显示整幅图
HOperatorSet.SetPart(hv_windowsID, 0, 0, hv_height, hv_width);
//窗口上显示图像
HOperatorSet.DispObj(ho_imageCamera, hv_windowsID);
ho_imageCamera.Dispose();
}
//采集图像线程
private void ThreadContinueGrab()
{
//先销毁图像,不然会造成内存泄漏
while (isOpenCamera)
{
ho_imageCamera.Dispose();
//采集图像
// HOperatorSet.GrabImage(out ho_imageCamera, hv_AcqHandle);
HOperatorSet.GrabImageAsync(out ho_imageCamera, hv_AcqHandle, -1);
HOperatorSet.DispObj(ho_imageCamera, hv_windowsID);
}
//关闭调用的摄像头
HOperatorSet.CloseFramegrabber(hv_AcqHandle);
ho_imageCamera.Dispose();
}
//开启线程
Thread Th_openCamera;
public bool isOpenCamera;
private void starGrab()
{
if (isOpenCamera == false)
{
isOpenCamera = true;
Th_openCamera = new Thread(new ThreadStart(ThreadContinueGrab));
Th_openCamera.Start();
Th_openCamera.IsBackground = true;
btn_openCamera.Text = "关闭摄像头";
}
else
{
isOpenCamera = false;
btn_openCamera.Text = "打开摄像头";
}
}
private void button3_Click(object sender, EventArgs e)
{
iniCamera();
}
private void btn_openCamera_Click(object sender, EventArgs e)
{
starGrab();
}
C# 联合halcon 入门(二) 读取笔记本自带摄像头
最新推荐文章于 2022-02-24 14:16:56 发布