halcon版本 18.05(可以在win10 通过OpenFramegrabber)
VS:2015
相机:大恒
电脑系统:win10
界面如下:
这里采用定时器的方法 实现实时采集
public Form1()
{
InitializeComponent();
}
HTuple hv_AcqHandle = new HTuple(), //相机句柄
hv_WindowHandle = new HTuple();//窗口句柄
HTuple hv_Width = new HTuple(), hv_Height = new HTuple();
///关闭相机
private void button3_Click(object sender, EventArgs e)
{
HOperatorSet.CloseFramegrabber(hv_AcqHandle);
timer1.Enabled = false;
}
private void timer1_Tick(object sender, EventArgs e)
{
ho_Image.Dispose();
HOperatorSet.GrabImageAsync(out ho_Image, hv_AcqHandle, -1);
if (HDevWindowStack.IsOpen())
{
HOperatorSet.DispObj(ho_Image, HDevWindowStack.GetActive());
}
hv_Width.Dispose();hv_Height.Dispose();
HOperatorSet.GetImageSize(ho_Image, out hv_Width, out hv_Height);
if (HDevWindowStack.IsOpen())
{
HOperatorSet.SetPart(HDevWindowStack.GetActive(), 0, 0, hv_Height, hv_Width);
}
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
HOperatorSet.CloseFramegrabber(hv_AcqHandle);
timer1.Enabled = false;
}
private void Form1_Load(object sender, EventArgs e)
{
// cam.cls_AcqInit(out hv_AcqHandle,out hv_WindowHandle);
}
private void button1_Click_1(object sender, EventArgs e)
{
HOperatorSet.GenEmptyObj(out ho_Image);
// // 创建空对象
// Image Acquisition 01: Code generated by Image Acquisition 01
// 清空句柄
hv_AcqHandle.Dispose();
// 打开相机(参数:接口名称,cam2 相机名称,输出相机句柄)
HOperatorSet.OpenFramegrabber("GigEVision2", 0, 0, 0, 0, 0, 0, "progressive",
-1, "default", -1, "false", "default", "Cam2", 0, -1, out hv_AcqHandle);
// 从指定图像捕获设备 开始异步采集
HOperatorSet.GrabImageStart(hv_AcqHandle, -1);
// 判断某一窗口是否打开,文章开头有使用,如果打开了,则关闭
if (HDevWindowStack.IsOpen())
{
// 销毁窗口,在后文中将重新打开窗口
HOperatorSet.CloseWindow(HDevWindowStack.Pop());
}
// 设置窗口特征
HOperatorSet.SetWindowAttr("background_color", "black");
// 打开一个窗口,创建 该窗口的句柄
HOperatorSet.OpenWindow(0, 0, hWindowControl1.Width, hWindowControl1.Height, hWindowControl1.HalconWindow, "visible", "", out hv_WindowHandle);
// 将此句柄下发给halcon,halcon将此句柄保存起来,以后便可对此句柄所指的窗口进行任何操作,包括销毁这个窗口!
HDevWindowStack.Push(hv_WindowHandle);
}
private void button2_Click(object sender, EventArgs e)
{
if (button2.Text == "开始采集")
{
timer1.Enabled = true;
button2.Text = "停止采集";
}
else
{
button2.Text = "开始采集";
timer1.Enabled = false;
}
}
}
}
时间有限,做的比粗糙,大伙凑合着看看就行