C#调HALCON读GigE相机:HSmartWindowControl缩放平移 简介C# 调用 Halcon 读取海康相机并在 HSmartWindow 上完成平移缩放的完整示例工程面向已具备 C# 基础、正在做工业视觉上位机开发的初、中级工程师。工程演示了 HalconDotNet 引用的引入方式、相机设备的打开与图像异步采集、HObject 图像在显示控件上的呈现以及通过窗口操作模式与鼠标滚轮、移动事件实现画面平移与缩放可直接作为检测、定位类项目的显示模块骨架也可用于排查采集与显示之间的线程同步问题。压缩包共 46 个文件、约 22.53MB以 .cs 源码为核心配合 .csproj 与 .sln 项目文件、.config 配置、.dll 依赖库、.exe 与 .pdb 可执行及调试文件另有 .resx 资源与 VS 缓存等辅助文件解压后即可在 Visual Studio 中打开调试对照。内容已有 929 人学习适合拿来参考采集流程并搭建可交互的图像显示窗口。1. 从回调到窗口C# 调 HALCON 读国产 GigE 相机这条路卡人的从来不是取流上周帮人排查一个上位机相机取流一秒 30 帧很稳可鼠标滚轮一推图像就跳出去半屏拖到边缘松手画面又弹回原点。这套「C# 调 HALCON、把相机画面塞进 HSmartWindowControl、再自己做平移缩放」的组合真正的难点几乎全在后半段——取流只是把字节搬进来决定操作手感的是 part 与窗口坐标系之间的换算。这篇按一条能跑通的链路写SDK 环境对齐、回调里把裸指针变成 HObject、SetPart 怎么算才不被拉扁、滚轮锚点缩放和拖拽平移怎么落地最后把几次出错的情形列出来。做工业视觉上位机、要在预览画面上叠 ROI、又不想被控件原生交互牵着走的人可以照着抄一遍。2. 三个依赖先对齐工程骨架搭不起来后面全是白忙这套组合的失败有一半发生在写第一行业务代码之前。有人引用错了 DLL有人 32 位运行库配 64 位进程有人控件拖上去设计器直接崩。先把依赖关系理清楚后面调相机和调 part 才有意义。2.1 引用清单两个托管库加一堆运行库HALCON 的 .NET 程序集分两种halcondotnet.dll面向 .NET Framework4.6.1 以上都能用halcondotnetxl.dll面向 .NET 5/6/8。后者不是所有 HALCON 版本都完整尤其是 HSmartWindowControl 的 WinForms 版本老版本里缺胳膊少腿是常事。我一般的做法是新项目没有强制的 .NET Core 要求就直接上 .NET Framework 4.8省掉一大半兼容性排查。相机侧的托管封装通常是 SDK 安装目录下Development\DotNet\win64\MvCamCtrl.NET.dll配套的MvCameraControl.dll、MvCameraControlWrapper.dll这类底层库在Runtime\Win64_x64里。托管 DLL 引用进来只是编译期的事底层库找不到运行期照样抛DllNotFoundException。文件来源作用常见问题halcondotnet.dllHALCON 安装目录的 dotnet 子目录HObject、HOperatorSet、HWindow、HSmartWindowControl与目标框架版本不匹配halcondotnetxl.dll同上给 .NET 5/6/8 用老版本里 WinForms 控件支持不全MvCamCtrl.NET.dll相机 SDK 的 DotNet\win64相机枚举、取流、回调误引 win32 目录里的那份MvCameraControl.dll相机 SDK 的 Runtime\Win64_x64底层驱动通信没拷到输出目录或 PATH平台目标这一步也不要省。工程属性里把「平台目标」改成 x64并把「首选 32 位」取消勾选否则 AnyCPU 在 64 位系统上有可能以 32 位加载去加载 64 位的MvCamCtrl.NET.dll直接BadImageFormatException。看到这个异常先查平台目标再查 DLL 位数基本一次就能定位。提示不同厂商 SDK 的类名和函数前缀不一样有的叫Camera有的叫MyCamera参数顺序也略有差别。下文用MyCamera这套常见封装举例换成你手上那套时注意对着头文件或 IntelliSense 校正。2.2 最小骨架先让控件显示一张本地图不要一上来就接相机。先用本地图把 HALCON 的显示链路跑通确认控件能正常创建、能调HalconWindow、能显示图像再去接取流。这一步能在十分钟内排除掉一半的环境问题。using HalconDotNet; private void btnLoad_Click(object sender, EventArgs e) { // 1. 读一张本地图验证 HALCON 运行时是否正常 HOperatorSet.ReadImage(out HObject image, D:\test\board.png); HOperatorSet.GetImageSize(image, out HTuple w, out HTuple h); // 2. 关掉自动刷新连续刷新场景下能明显减少闪烁 HWindow win hSmartWindowControl1.HalconWindow; win.SetWindowParam(flush, false); // 3. 设置显示颜色灰度图默认是白彩色图会覆盖 win.SetColor(green); // 4. 显示并 p a hrefhttps://download.csdn.net/download/butoneren2008/88673981 stylecolor:#ec7500;font-size:14px; 本文还有配套的精品资源点击获取 /a img altmenu-r.4af5f7ec.gif srchttps://csdnimg.cn/release/wenkucmsfe/public/img/menu-r.4af5f7ec.gif stylewidth:16px;margin-left:4px;vertical-align:text-bottom;cursor:text; /p