设备抓图:CATIA V5 零件库与网络SDK编程

需积分: 36 112 下载量 143 浏览量 更新于2024-08-07 收藏 1.85MB PDF 举报
"该文档是海康威视的设备网络SDK编程指南,主要涉及设备(DVR&NVR)的网络编程接口,适用于V5.2版本。内容包括SDK的介绍、版本更新、函数调用顺序、各个功能模块的流程、函数调用实例以及详细的函数说明。其中,特别提到了两个设备抓图的函数:NET_DVR_CaptureJPEGPicture和NET_DVR_CaptureJPEGPicture_NEW,用于从设备中捕获单帧JPEG图片并保存到文件或内存中。" 在海康威视的网络SDK编程中,设备抓图功能是重要的组成部分,用于从DVR或NVR设备中获取图像数据。提供了两种方法来实现这一功能: 1. `NET_DVR_CaptureJPEGPicture` 函数用于单帧数据捕获并保存成JPEG图片。这个函数需要用户ID(lUserID)、通道号(lChannel)、JPEG参数结构体(lpJpegPara)和保存图片的文件路径(sPicFileName)。当SDK发送命令给设备,设备抓取图片后,JPEG数据会返回给客户端,并保存成指定路径的文件。如果设备不支持JPEG抓图或特定分辨率,接口会返回失败,错误号可能是23或29。 2. `NET_DVR_CaptureJPEGPicture_NEW` 函数则更进一步,它不仅捕获JPEG图片,还能将图片数据保存到用户指定的内存缓冲区(sJpegPicBuffer)中。此函数需要提供缓冲区的大小(dwPicSize),并使用`lpSizeReturned`返回实际的数据大小。这允许程序在内存中处理图像数据,而不必写入磁盘。 SDK编程指南还涵盖了其他多个模块的流程,例如IP通道配置、实时预览、回放和下载、参数配置、远程设备维护、语音对讲、报警处理以及透明通道等。每个模块都包含了具体的函数调用顺序和示例代码,便于开发者理解和应用。 在开发过程中,开发者需要遵循SDK的调用顺序,了解每个函数的功能和使用场景,同时注意错误处理,通过`NET_DVR_GetLastError`获取错误码以诊断问题。此外,SDK还提供了设置网络连接超时时间、重连功能和多网卡绑定等本地参数配置的接口,以优化网络通信性能。 这份编程指南为开发者提供了全面的工具和指导,帮助他们有效地利用海康威视的设备网络SDK来实现各种监控和管理功能。
2018-06-25 上传
type TShowStr = record X: Word; Y: Word; S: array [0 .. 43] of AnsiChar; end; type TCamera = record pHWND: HWND; strict private aCam: LongInt; g_nPort: LongInt; struDeviceInfo: NET_DVR_DEVICEINFO_V30; lRealHandle: LongInt; struPlayInfo: NET_DVR_CLIENTINFO; pUser: Pointer; dwRet: Integer; public property ErrCode: Integer read dwRet; procedure HCLogin(IP, User, Psd: String; Port: Word); procedure HCPlay(aHWND: HWND); procedure HCAddChar(str: TArray); procedure HCAddChar_V30(str: TArray); function HCGetJpeg(JpgName: String; JpgSize: Word = 0; JpgQua: Word = 19): Boolean; procedure HCStop; procedure HCLogout; end; {$ENDIF //} implementation procedure TCamera.HCLogin(IP, User, Psd: String; Port: Word); begin NET_DVR_Init(); lRealHandle := -1; dwRet := 0; aCam := NET_DVR_Login_V30(PAnsiChar(ansistring(IP)), Port, PAnsiChar(ansistring(User)), PAnsiChar(ansistring(Psd)), @struDeviceInfo); dwRet := NET_DVR_GetLastError; end; procedure TCamera.HCPlay(aHWND: HWND); begin struPlayInfo.lChannel := 1; struPlayInfo.lLinkMode := 0; struPlayInfo.sMultiCastIP := NIL; struPlayInfo.hPlayWnd := aHWND; lRealHandle := NET_DVR_RealPlay_V30(aCam, @struPlayInfo, nil, pUser, true); dwRet := NET_DVR_GetLastError; end; procedure TCamera.HCAddChar(str: TArray); var i: Integer; aStr: NET_DVR_SHOWSTRING; begin if length(str) > MAX_STRINGNUM then begin setlength(str, MAX_STRINGNUM); end; for i := 0 to length(str) - 1 do begin aStr.struStringInfo[i].wShowString := 1; aStr.struStringInfo[i].wStringSize := length(str[i].S); aStr.struStringInfo[i].wShowStringTopLeftX := str[i].X; aStr.struStringInfo[i].wShowStringTopLeftY := str[i].Y; move(str[i].S[0], aStr.struStringInfo[i].sString[0], length(str[i].S)); end; aStr.dwSize := sizeof(aStr); NET_DVR_SetDVRConfig(aCam, NET_DVR_SET_SHOWSTRING, 1, @aStr, sizeof(NET_DVR_SHOWSTRING)); dwRet := NET_DVR_GetLastError; end; procedure TCamera.HCAddChar_V30(str: TArray); var i: Integer; aStr: NET_DVR_SHOWSTRING_V30; begin if length(str) > MAX_STRINGNUM_V30 then begin setlength(str, MAX_STRINGNUM_V30); end; for i := 0 to length(str) - 1 do begin aStr.struStringInfo[i].wShowString := 1; aStr.struStringInfo[i].wStringSize := length(str[i].S); aStr.struStringInfo[i].wShowStringTopLeftX := str[i].X; aStr.struStringInfo[i].wShowStringTopLeftY := str[i].Y; move(str[i].S[0], aStr.struStringInfo[i].sString[0], length(str[i].S)); end; aStr.dwSize := sizeof(aStr); NET_DVR_SetDVRConfig(aCam, NET_DVR_SET_SHOWSTRING_V30, 1, @aStr, sizeof(NET_DVR_SET_SHOWSTRING_V30)); dwRet := NET_DVR_GetLastError; end; function TCamera.HCGetJpeg(JpgName: String; JpgSize: Word = 0; JpgQua: Word = 19): Boolean; var aJpg: NET_DVR_JPEGPARA; begin aJpg.wPicSize := JpgSize; aJpg.wPicQuality := JpgQua; if aCam >= 0 then begin result := NET_DVR_CaptureJPEGPicture(aCam, 1, aJpg, PAnsiChar(ansistring(JpgName))); dwRet := NET_DVR_GetLastError(); end else result := false; dwRet := NET_DVR_GetLastError; end; procedure TCamera.HCStop; begin if lRealHandle >= 0 then begin NET_DVR_StopRealPlay(lRealHandle); lRealHandle := -1; end; PlayM4_CloseStream(g_nPort); PlayM4_FreePort(g_nPort); end; procedure TCamera.HCLogout; begin if lRealHandle > -1 then begin HCStop; end; if aCam >= 0 then begin NET_DVR_Logout_V30(aCam); aCam := -1; end; NET_DVR_Cleanup(); end;