关于字幕叠加(远程控制),如何实现?[c#][海康]
- C# code
[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Ansi)] public struct NET_DVR_SHOWSTRINGINFO { //编码端字符叠加配置结构 public ushort dwShowString; public int wStringSize; public ushort wShowStringTopLeftX; public ushort wShowStringTopLeftY; //[MarshalAs(UnmanagedType.LPArray, SizeConst = 44)] //public char[] sString; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 44)] public string sString; } [StructLayout(LayoutKind.Sequential)] public struct NET_DVR_SHOWSTRING { //叠加字符结构 public int dwSize; public NET_DVR_SHOWSTRINGINFO struStringInfo; } //编码端叠加字符 [DllImport("HCNetSDK.dll")] public static extern bool NET_DVR_SetDVRConfig(int lUserID, int dwCommand, int lChannel, NET_DVR_SHOWSTRING lpInBuffer, int dwInBufferSize); private void button5_Click(object sender, EventArgs e) { NET_DVR_SHOWSTRINGINFO _showstringinfo = new NET_DVR_SHOWSTRINGINFO(); NET_DVR_SHOWSTRING _showstring = new NET_DVR_SHOWSTRING(); string strTT = "我是来测试的!"; _showstring.dwSize = 1; _showstring.struStringInfo = _showstringinfo; _showstring.struStringInfo.dwShowString = 1; _showstring.struStringInfo.sString = strTT; _showstring.struStringInfo.wStringSize = strTT.Length; _showstring.struStringInfo.wShowStringTopLeftX = 100; _showstring.struStringInfo.wShowStringTopLeftY = 100; int iSize= Marshal.SizeOf(_showstring); bool bac = NET_DVR_SetDVRConfig(iLoginRef, 131, 0, _showstring, iSize); if (bac == false) { MessageBox.Show("失败"); } }
不知道为什么,一直失败,做过的帮个忙看看!!
- C/C++ code
/*****************************DS-6001D/F(end)***************************///单字符参数(子结构)typedef struct { WORD wShowString; // 预览的图象上是否显示字符,0-不显示,1-显示 区域大小704*576,单个字符的大小为32*32 WORD wStringSize; /* 该行字符的长度,不能大于44个字符 */ WORD wShowStringTopLeftX; /* 字符显示位置的x坐标 */ WORD wShowStringTopLeftY; /* 字符名称显示位置的y坐标 */ char sString[44]; /* 要显示的字符内容 */}NET_DVR_SHOWSTRINGINFO, *LPNET_DVR_SHOWSTRINGINFO;//叠加字符(9000扩展)typedef struct { DWORD dwSize; NET_DVR_SHOWSTRINGINFO struStringInfo[MAX_STRINGNUM_V30]; /* 要显示的字符内容 */}NET_DVR_SHOWSTRING_V30, *LPNET_DVR_SHOWSTRING_V30;//叠加字符扩展(8条字符)typedef struct { DWORD dwSize; NET_DVR_SHOWSTRINGINFO struStringInfo[MAX_STRINGNUM_EX]; /* 要显示的字符内容 */}NET_DVR_SHOWSTRING_EX, *LPNET_DVR_SHOWSTRING_EX;//叠加字符typedef struct { DWORD dwSize; NET_DVR_SHOWSTRINGINFO struStringInfo[MAX_STRINGNUM]; /* 要显示的字符内容 */}NET_DVR_SHOWSTRING, *LPNET_DVR_SHOWSTRING;/********************************************************* Function: OnBnClickedBtnStringOk Desc: finish text overlay settings Input: Output: Return: **********************************************************/void CDlgRemoteShowString::OnBnClickedBtnStringOk(){ UpdateData(TRUE); char szLan[128] = {0}; int i = m_comboShowArea.GetCurSel(); m_struShowString.struStringInfo[i].wShowString = (WORD)m_bChkShow; memcpy(m_struShowString.struStringInfo[i].sString, m_csString, 44); m_struShowString.struStringInfo[i].wStringSize = (WORD)strlen(m_csString); m_struShowString.struStringInfo[i].wShowStringTopLeftX = (WORD)m_iStringX; m_struShowString.struStringInfo[i].wShowStringTopLeftY = (WORD)m_iStringY; if (!NET_DVR_SetDVRConfig(m_lLoginID, NET_DVR_SET_SHOWSTRING_V30, m_iChanShowNum, &m_struShowString, sizeof(NET_DVR_SHOWSTRING_V30))) { g_pMainDlg->AddLog(g_pMainDlg->m_iCurDeviceIndex, OPERATION_FAIL_T, "NET_DVR_SET_SHOWSTRING_V30"); g_StringLanType(szLan, "设置字符参数失败", "Failure to set character parameters"); AfxMessageBox(szLan); return ; } g_pMainDlg->AddLog(g_pMainDlg->m_iCurDeviceIndex, OPERATION_SUCC_T, "NET_DVR_SET_SHOWSTRING_V30");}
[解决办法]
帮你顶
[解决办法]
int iSize= Marshal.SizeOf(_showstring); 转换问题
[解决办法]
[解决办法]
有点难度啊。
[解决办法]
友情帮顶...
[解决办法]
帮顶一下