最近在做一个外部硬件触发的项目,用的相机是basler的3800-10gm 相机。编程语言是C#我先上代码:(因为是测试项目,所以代码写的很丑陋,仅作实验目使用)
第一步:初始化相机
- private void Form1_Load(object sender, EventArgs e)
- {
-
- HOperatorSet.OpenFramegrabber("GigEVision", 0, 0, 0, 0, 0, 0, "progressive",
- -1, "default", -1, "false", "default", "Cam_Up", 0, -1, out hv_AcqHandle);
- HOperatorSet.SetFramegrabberParam(hv_AcqHandle, "TriggerSelector", "FrameStart");
- HOperatorSet.SetFramegrabberParam(hv_AcqHandle, "grab_timeout", 10000);
- HOperatorSet.SetFramegrabberParam(hv_AcqHandle, "TriggerMode", "On");
- HOperatorSet.SetFramegrabberParam(hv_AcqHandle, "TriggerSource", "Line1");
- FrameCallback += FrameCallback;
- //HOperatorSet.get
- }
复制代码 第二步:注册回调函数,并且查看是否进入回调函数
- public static int MyCallback(IntPtr AcqHandle, IntPtr Context, IntPtr UserContext)
- {
- int Content = UserContext.ToInt32();
- Console.WriteLine("--------进入回调函数--------");
- return 0;
- }
- private void Btn_Grab_Click(object sender, EventArgs e)
- {
- try
- {
- int myContent = 2;
- HOperatorSet.GetFramegrabberParam(hv_AcqHandle, "available_callback_types", out HTuple value);
- foreach (var it in value.SArr)
- Console.WriteLine(it);
- int len = value.SArr.Length;
- IntPtr Ptr = Marshal.GetFunctionPointerForDelegate(FrameCallback);
- HOperatorSet.SetFramegrabberCallback(hv_AcqHandle, value.SArr[len-4], Ptr, myContent);
- HOperatorSet.GetFramegrabberCallback(hv_AcqHandle, value.SArr[len - 4], out HTuple callFunc, out HTuple content);
- HOperatorSet.GrabImageStart(hv_AcqHandle, -1);
- HOperatorSet.GrabImageAsync(out HObject image, hv_AcqHandle, -1);
-
- }
- catch(Exception ex)
- {
- }
- }
复制代码 奇怪的是我把basler支持的所有回调函数类型都试了一个遍,没有发现一个可以进入到MyCallback函数里面的,不知道是哪个地方组偶哦了,有谁做过能给点参考吗?感谢!!!!
|