CB_Device SDK 示例代码

版本 1.0 · 更新于 2026-10-21 · 阅读 0

基于真实接口的最小可用示例:枚举→打开→设置参数→回调采集→保存 BMP。

以下示例使用头文件中的真实接口名(CB_Device 支持回调,以下用回调方式采集)。

示例一:回调方式采集并在回调中保存 BMP

#include "CB_DeviceApi.h"
#include <cstdio>

// 采集回调:每帧就绪时由 SDK 调用
void __stdcall OnGrab(int32_t iDevIndex, CB_TFrameData* ptFrameData, void* pContext)
{
    CB_TFrameData* f = ptFrameData;
    printf("frame %llu: %ux%u format=%u\n",
           (unsigned long long)f->tChunkData.iFrameId,
           f->tImageInfo.iWidth, f->tImageInfo.iHeight,
           f->tImageInfo.ePixelFormat);

    // 保存为 BMP(需自行填充 CB_TSaveImage)
    CB_TSaveImage save{};
    save.pImageBuf        = f->pBuffer;
    save.tImageInfo       = f->tImageInfo;
    save.eImageFileFormat = CB_ImageFileFormat_Bmp;
    save.pFilePathName    = "frame.bmp";
    CB_SaveImage(&save);

    // 处理完必须释放帧内存
    CB_FreeGrabFrameBuffer(iDevIndex, f);
}

int main()
{
    if (CB_Initial() != CB_E_SUCCESS) return -1;

    int32_t nDev = 0;
    CB_EnumerateDevices(&nDev, nullptr);
    if (nDev == 0) { CB_Uninitial(); return -1; }

    CB_OpenDevice(0);
    CB_SetGrabCallback(0, OnGrab, nullptr);
    CB_StartGrabbing(0);

    printf("grabbing, press Enter to stop...\n");
    getchar();

    CB_StopGrabbing(0);
    CB_CloseDevice(0);
    CB_Uninitial();
    return 0;
}

示例二:通过参数树设置曝光时间(GenICam 风格)

// 假设设备暴露名为 "ExposureTime" 的浮点参数(具体名称以相机 XML 为准)
float fExp = 0;
if (CB_GetFloatParam(0, "ExposureTime", &fExp) == CB_E_SUCCESS) {
    printf("current exposure: %f\n", fExp);
}
CB_SetFloatParam(0, "ExposureTime", 1000.0f);   // 单位由 CB_Unit_e 决定

参数名(如 ExposureTime、Gain、TriggerMode 等)与可选值请参考对应机型的 GenICam XML 或厂商文档;
调用前可用 CB_GetParamNameByIndex 枚举、用 CB_GetParamInfoByName 确认类型与权限。