谁用.net做过视频采集的 进来看看 急啊!!!!!!!!!!
我用的是海康威视DS-400xH系列卡系统SDK做一个视频监控系统,遇到一个函数
int StartVideoPreview(HANDLE hChannelHandle,HWND WndHandle,RECT *rect,BOOLEAN bOverlay,int VideoFormat,int FrameRate);
参数:
HANDLE hChannelHandle 通道句柄
HWND WndHandle, 窗口句柄
RECT *rect, 窗口内的矩型区域
BOOLEAN bOverlay, 打开或关闭Overlay模式预览
int VideoFormat, 视频格式(见2.1节)
int FrameRate 视频帧率
说明:启动视频预览,如果在VideoFormat中设置为YUV类型,则系统中的显示卡必须支持硬件Overlay功能,显示卡的颜色必须为16位色或32位色;如果VideoFormat设置为RGB类型,则采用DDRAW模式显示,即视频窗口会覆盖所有位于窗口范围内的图像; 返回:正确为0,其他为第1节定义的错误号;
我是用DLLImport方法导入这个方法的
[DllImport( "DS40xxSDK.dll ")]
static extern int StartVideoPreview(int hChannelHandle,int WndHandle,ref RECT rect,bool bOverlay,int VideoFormat,int FrameRate);
但是对于bOverlay,VideoFormat,FrameRate 三个参数不知道什么意思,这个方法我在调用的时候出现 “对 PInvoke 函数“TCL!TCL.Class1::StartVideoPreview”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。”的错误,请问是什么地方出错???????????????????
------解决方案--------------------[DllImport( "DS40xxSDK.dll ")]
public static extern int StartVideoPreview (IntPtr hChannelHandle, IntPtr WndHandle, ref Rectangle rect, bool bOverlay, int VideoFormat, int FrameRate);
private void Form1_Load(object sender, EventArgs e)
{
.....
Rectangle rc = new Rectangle(0, 0, 710,580);
rc = panel1.ClientRectangle;
StartVideoPreview(channelHandle[0], panel1.Handle, ref rc, true, 0x00000020, 25);
}