调用NET_DVR_RigisterDrawFun试试NET_DVR_RigisterDrawFun
预览画面叠加字符和图像,Linux下无此接口。BOOL NET_DVR_RigisterDrawFun(
LONG lRealHandle,
fDrawFun cbDrawFun,
DWORD dwUser
);
Parameters
lRealHandle
[in] NET_DVR_RealPlay或NET_DVR_RealPlay_V30的返回值
cbDrawFun
[in] 画图回调函数
dwUser
[in] 用户数据
Callback Function
typedef void(CALLBACK *fDrawFun)(
LONG lRealHandle,
HDC hDc,
DWORD dwUser
);
Callback Function Parameters
lRealHandle
[out] 当前的预览句柄
hDc
[out] 画图DC
dwUser
[out] 用户数据
Return Values
TRUE表示成功,FALSE表示失败。获取错误码调用NET_DVR_GetLastErrorRes
该接口主要完成注册回调函数,获得当前表面的device context。用户可以在这个DC上画图或写字,就好像在窗口的客户区DC上绘图,但这个DC不是窗口客户区的DC,而是播放器DirectDraw里的Off-Screen表面的DC。 如果调用接口NET_DVR_RealPlay_V30进行预览,参数bBlocked建议置1(TRUE),这样预览接口返回成功即可该调用该接口。如果参数bBlocked置0,预览接口返回成功但图像还未正常显示,该接口会返回失败,获取错误号为12(调用次序错误)。
预览画面叠加字符和图像,Linux下无此接口。BOOL NET_DVR_RigisterDrawFun(
LONG lRealHandle,
fDrawFun cbDrawFun,
DWORD dwUser
);
Parameters
lRealHandle
[in] NET_DVR_RealPlay或NET_DVR_RealPlay_V30的返回值
cbDrawFun
[in] 画图回调函数
dwUser
[in] 用户数据
Callback Function
typedef void(CALLBACK *fDrawFun)(
LONG lRealHandle,
HDC hDc,
DWORD dwUser
);
Callback Function Parameters
lRealHandle
[out] 当前的预览句柄
hDc
[out] 画图DC
dwUser
[out] 用户数据
Return Values
TRUE表示成功,FALSE表示失败。获取错误码调用NET_DVR_GetLastErrorRes
该接口主要完成注册回调函数,获得当前表面的device context。用户可以在这个DC上画图或写字,就好像在窗口的客户区DC上绘图,但这个DC不是窗口客户区的DC,而是播放器DirectDraw里的Off-Screen表面的DC。 如果调用接口NET_DVR_RealPlay_V30进行预览,参数bBlocked建议置1(TRUE),这样预览接口返回成功即可该调用该接口。如果参数bBlocked置0,预览接口返回成功但图像还未正常显示,该接口会返回失败,获取错误号为12(调用次序错误)。
得到视频数据后,调用海康播放库解码,然后自己用DDraw自己做显示,通过DDraw的离屏表面将自己的内容叠加上去;也可以调用Win32API实现,但是需要自己将得到YUV数据转换成RGB,WIN32API不支持YUV数据显示。
关于各个接口的调用历程,可以参考海康播放库文档:
流模式下
PlayM4_GetPort
PlayM4_SetStreamOpenMode
PlayM4_OpenStream
PlayM4_SetDisplayBuf
PlayM4_Play
(PlayM4_ReversePlay) 倒放接口
PlayM4_InputData
PlayM4_Stop
PlayM4_CloseStream
PlayM4_FreePort
可以直接 Graphics g= Graphics.FromImage(DC)?
可以直接 Graphics g= Graphics.FromImage(DC)?
DC是设备环境句柄,为了方便开发人员,微软将设备信息封装起来,只返回给开发人员一个DC,作为设备的标示。
MFC获取设备句柄的方式 CWnd::GetDC(); C#就不知道了。
好像是这个意思,对么?
主要我想实现的是在,预览画面之前,对画面进行处理,然后再预览出来
不是回放的时候对画面进行处理。