海康抓图保存路径失败NET_DVR_CaptureJPEGPicture

文章讲述了在C++代码中,如何使用转义字符处理路径字符串,并展示了NET_DVR_CapturePicture函数用于从摄像头捕获BMP和JPEG图片的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原因:"D:\\ToolData\\"是用双引号进行转义字符,而不是"D:\ToolData\"

void RealPlay::OnCapture()
{
    LOG_DEBUGGING("m_lPlayHandle:%d", m_lPlayHandle);
    if (m_lPlayHandle == -1)
    {
        LOG_DEBUGGING("请先选择一个通道播放");
        return;
    }
    char PicName[256] = { 0 };

    int iPicType = 0;
    if (0 == iPicType)  //bmp
    {
        CTime CurTime = CTime::GetCurrentTime();
        sprintf(PicName, "D:\\ToolData\\%04d%02d%02d%02d%02d%02d_ch%02d.bmp", CurTime.GetYear(), CurTime.GetMonth(), CurTime.GetDay(), \
            CurTime.GetHour(), CurTime.GetMinute(), CurTime.GetSecond(), 1);
        LOG_DEBUGGING("%s",PicName);
        if (NET_DVR_CapturePicture(m_lPlayHandle, PicName))
        {
            LOG_DEBUGGING("抓图成功!");
            QMessageBox::information(NULL, "Camera", QStringLiteral("抓图成功!"));
        }
        else
        {
            LOG_DEBUGGING("抓图失败!");
        }
    }
    else if (1 == iPicType)  //jgp
    {
        CTime CurTime = CTime::GetCurrentTime();;
        sprintf(PicName, "D:\\ToolData\\%04d%02d%02d%02d%02d%02d_ch%02d.jpg", CurTime.GetYear(), CurTime.GetMonth(), CurTime.GetDay(), \
            CurTime.GetHour(), CurTime.GetMinute(), CurTime.GetSecond(), 1);

        //组建jpg结构
        NET_DVR_JPEGPARA JpgPara = { 0 };
        JpgPara.wPicSize = (WORD)(0);
        JpgPara.wPicQuality = (WORD)(0);

        LONG iCurChan = 1;

        if (NET_DVR_CaptureJPEGPicture(m_struDeviceInfo.lLoginID, iCurChan, &JpgPara, PicName))
        {
            LOG_DEBUGGING("抓图成功");
            QMessageBox::information(NULL, "Camera", QStringLiteral("抓图成功!"));
        }
    }
    return;
}

### 海康SDK `NET_DVR_Login_V30` 函数使用说明 #### 函数原型 为了成功连接并操作海康威视设备,开发者通常会利用 `NET_DVR_Login_V30` 接口完成设备登录动作。该函数定义如下: ```c LONG NET_DVR_Login_V30(LPCTSTR lpszIP, WORD wPort, LPCTSTR lpszUserName, LPCTSTR lpszPassword, LPNET_DVR_DEVICEINFO_V30 lpDeviceInfo); ``` 参数解释: - `lpszIP`: 设备的 IP 地址字符串表示形式。 - `wPort`: 连接端口号,默认情况下为 8000[^2]。 - `lpszUserName`: 用户名,通常是 `"admin"`。 - `lpszPassword`: 密码,由具体配置决定。 - `lpDeviceInfo`: 结构体指针,用于接收设备信息。 返回值: - 成功则返回有效的用户 ID (`lUserID`);失败则返回负数,并可通过 `NET_DVR_GetLastError()` 获取错误代码。 #### 示例代码展示 下面是一段完整的 C++ 风格示例程序,演示了如何调用上述 API 来执行登录操作: ```cpp #include <iostream> using namespace std; // 假设已经包含了必要的头文件以及初始化工作已完成 int main() { NET_DVR_DEVICEINFO_V30 struDeviceInfo; // 尝试登录指定的网络摄像机或其他兼容硬件 LONG lUserID = NET_DVR_Login_V30("192.168.0.1", 8000, "admin", "password", &struDeviceInfo); if (lUserID >= 0) { cout << "Login successful!" << endl; // 此处可以继续其他业务逻辑... // 记得登出以释放资源 NET_DVR_Logout(lUserID); } else { cerr << "Failed to login, error code: " << NET_DVR_GetLastError() << endl; } // 清理 SDK 加载环境 NET_DVR_Cleanup(); } ``` 这段代码首先尝试通过给定的 IP 和凭证向目标设备发起认证请求。如果一切顺利,则打印一条成功的消息;反之,在遇到问题时输出具体的错误编号以便排查原因。无论结果如何,最后都会清理掉不再需要的 SDK 资源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值