读书人

关于字幕叠加(远程控制)怎么实现?

发布时间: 2012-04-11 17:42:33 作者: rapoo

关于字幕叠加(远程控制),如何实现?[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); 转换问题
[解决办法]

[解决办法]
有点难度啊。
[解决办法]
友情帮顶...
[解决办法]
帮顶一下

读书人网 >C#

热点推荐