CBXS3D SDK 示例代码

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

基于真实接口的最小可用示例:主动采集光条点、保存原图为 BMP。

以下示例使用头文件中的真实接口名(XS3D SDK 无回调,统一用主动采集)。

示例一:主动采集一帧光条点(数据格式 DF_POINT)

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

int main()
{
    // 1) 初始化(可选先开日志)
    CBXS_SetLog(true, nullptr, 2);
    if (CBXS_Initial() != CBXS_RET_SUCCESS) {
        return -1;
    }

    // 2) 枚举设备
    CBXS_DEVICE_INFO_LIST list{};
    if (CBXS_EnumDevices(&list) != CBXS_RET_SUCCESS || list.nDeviceNum == 0) {
        printf("未找到设备\n");
        CBXS_UnInitial();
        return -1;
    }

    // 3) 创建句柄并打开设备
    void* handle = nullptr;
    CBXS_CreateDeviceHandle(&handle, list.pDeviceInfo[0]);
    CBXS_OpenDevice(handle);

    // 4) 设置数据格式为「仅光条点」
    CBXS_SetDataFormat(handle, CBXS_DF_POINT);

    // 5) 关键参数(按需)
    CBXS_SetExposureTime(handle, 1.0f);   // 单位 ms

    // 6) 启动采集
    CBXS_StartAcquisition(handle);

    // 7) 主动取一帧
    CaptureData* data = nullptr;
    if (CBXS_CaptureData(handle, &data) == CBXS_RET_SUCCESS && data != nullptr) {
        unsigned short* pt = data->pPoint;   // 长度 = usWidth
        for (int c = 0; c < data->param.usWidth; ++c) {
            if (pt[c] == 0) continue;          // 空点
            float imgY = pt[c] / 16.0f;        // 该列光条点的图像坐标
            // ... 使用 imgY 做测量 ...
        }
        CBXS_ReleaseData(handle, data);         // 必须释放
    }
    CBXS_StopAcquisition(handle);

    // 8) 收尾
    CBXS_CloseDevice(handle);
    CBXS_DestroyDeviceHandle(handle);
    CBXS_UnInitial();
    return 0;
}

示例二:保存原图为 BMP

// 数据格式设为原图后,取一帧并保存
CBXS_SetDataFormat(handle, CBXS_DF_IMAGE);
CBXS_StartAcquisition(handle);

CaptureData* data = nullptr;
if (CBXS_CaptureData(handle, &data) == CBXS_RET_SUCCESS && data != nullptr
    && data->pImage != nullptr) {
    CBXS_HelperSaveToBmp(data->pImage, data->param.usWidth, data->param.usHeight,
                         8, "capture.bmp");
    CBXS_ReleaseData(handle, data);
}
CBXS_StopAcquisition(handle);

更多示例见 SDK 安装包 samples/ 目录。