#ifndef CIKAPDEVICE_H #define CIKAPDEVICE_H #include "IIKapDevice.h" #include "IKapC.h" #include "IKapCDef.h" #include #include #include #include /** * @brief IKapDevice 实现类 * 封装 IKapLibrary C 接口,实现相机操作功能 */ class CIKapDevice : public IIKapDevice { public: CIKapDevice(); ~CIKapDevice(); // 初始化/释放库 int InitLibrary() override; int TerminateLibrary() override; // 枚举设备 int EnumerateDevices(unsigned int& nCount) override; int GetDeviceInfo(unsigned int nIndex, IKapDeviceInfo& deviceInfo) override; // 打开/关闭设备 int OpenDevice(unsigned int nIndex, int accessMode = 4) override; int CloseDevice() override; int IsConnected(bool& bConnected) override; // 采集图像 int GrabSingleFrame(ImageData& imageData, unsigned int nTimeout = 5000) override; int StartGrabbing(ImageCallback callback, void* pUser = nullptr) override; int StopGrabbing() override; bool IsGrabbing() override; // 设置相机参数 int SetExposureTime(double exposureTime) override; int GetExposureTime(double& exposureTime) override; int SetGain(double gain) override; int GetGain(double& gain) override; int SetTriggerMode(bool bEnable) override; int ExecuteSoftwareTrigger() override; // 获取图像信息 int GetWidth(unsigned int& width) override; int GetHeight(unsigned int& height) override; int SetROI(unsigned int offsetX, unsigned int offsetY, unsigned int width, unsigned int height) override; // 获取版本信息 int GetLibraryVersion(unsigned int& version) override; private: // 内部辅助函数 int CreateStreamAndBuffer(); int ReleaseStreamAndBuffer(); void GrabbingThread(); // 采集线程函数 int CopyImageData(ITKBUFFER hBuffer, ImageData& imageData); // IKapC 句柄 ITKDEVICE m_hDevice; // 设备句柄 ITKSTREAM m_hStream; // 数据流句柄 // 采集相关 std::atomic m_bIsGrabbing; // 是否正在采集 std::atomic m_bLibInitialized; // 库是否已初始化 std::thread m_grabbingThread; // 采集线程 ImageCallback m_imageCallback; // 图像回调函数 void* m_pUserData; // 用户数据 // Buffer 管理 const unsigned int m_nBufferCount = 3; // Buffer 数量 std::vector m_vecBuffers; // Buffer 列表 // 线程安全 std::mutex m_mutex; // 设备信息 unsigned int m_nDeviceIndex; // 当前打开的设备索引 bool m_bDeviceOpened; // 设备是否已打开 }; #endif // CIKAPDEVICE_H