项目场景:
最近需要在unity里面接入工业相机图像,先说结论,unity可以直接调用basler的pylonc.net.dll驱动,直接读取basler相机;
海康以及大恒相机都不能直接调用官方dll;至于原因不太完全明白,可能是这两者的驱动dll都依赖于部分c++编写的dll;而c++写的dll属于非托管内存管理,所以不能直接被调用。
这里再解释一下,unity导入dll分2种,一类是c++ dll,通过dllimport调用;一类是c# dll,直接通过using 命名空间调用,很方便。
而这两家的dll都恰好属于两者都有的情况,既有c++部分,也有c#部分,导致既不能以dllimport调用,也不能以using 调用。
解决办法
这目前我只能通过单独打开一个相机exe,和unity进行进程通信,把数据传过去。
相机exe端
using NetMQ;
using NetMQ.Sockets;
//NetMQ方案
PublisherSocket publisher = new PublisherSocket();
publisher.Options.SendHighWatermark = 4; // 最多缓存4帧未被订阅者接收
publisher.Bind("tcp://*:5555");
/// <summary>
/// 回调函数,用于获取图像信息和显示图像
/// </summary>
/// <param name="obj">用户自定义传入参数</param>
/// <param name="objIFrameData">图像信息对象</param>
private void __CaptureCallbackPro(object objUserParam, IFrameData objIFrameData)
{
try
{
byte[] jpegBytes = ConvertIFrameDataToJpeg(objIFrameData);
Logger.Log($"发送图像大小 jpegBytes: {
jpegBytes.Length}");
if (publisher.HasOut) // 有订阅者连接时再发
{
publisher.SendMoreFrame("image").SendFrame(jpeg




被折叠的 条评论
为什么被折叠?



