关于海康摄像头OSD字幕叠加(.NET/C#/Formwork)

2023-05-16

刚接触摄像头代码的编写,这里记录一下吧!记录一下我挨打的过程!!

在摄像头里面添加字符串,困扰了很久,资料也看了很多,海康官网的文档看了也不是很懂,说白了,就是想CV,嗐!

请求同事帮忙,我们一起试了四五种方法,终于成功了一个,代码如下:

 private void btnAdd_Click(object sender, EventArgs e)
        {
            foreach (VideoForm mf in MainForm.m_videoformCs)
            {
                if (mf.m_lUserID == 0)
                {
                    mf.ReLogin();//重要   判断小于0 后文字信息加不上;不判断则能添加上去但是Video Info窗体一直不退出一直提示没设备;删除则视频直接不显示;
                }
                List<ShowText> List = new List<ShowText>();
                Font F = new Font("黑体", 18, FontStyle.Italic | FontStyle.Bold);
                Point P = new Point(10, 50);
                ShowText text = new ShowText();
                text.Text = idText.Text + "  " + nameText.Text + "  " + fxText.Text + "\r\n" + userText.Text + "  " + videoPlaceText.Text + "  " + videoDwText.Text + "\r\n" + "管径:" + gjText.Text + "  " + "埋深:" + msText.Text + "  " + "材质:" + czText.Text;
                text.Ft = F;
                text.Pt = P;
                text.Color = Color.Aqua;
                List.Add(text);
                mf.List = List;

            }
        }

VideoForm为显示视频得控件; MainForm是主窗体;m_lUserID是NET_DVR_Login_V40登录返回值;ReLogin();是重新登录的方法;idText.Text类似的都是输入值;

 

显示效果不佳,文字闪烁的很厉害,用我老大的话来说就是会闪没了;另外一个提示说需要重新写解编码器,我是崩溃的;

昨天因为录制视频一直不成功然后更改了窗体布局,不得不重新来选择字符的叠加,然再次百度时看到了以下代码:


[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]
        public struct NET_DVR_SHOWSTRING_V30
        {
            /// <summary>
            /// 结构体大小
            /// </summary>
            public int dwSize;
            /// <summary>
            /// 要显示的字符内容
            /// </summary>
            [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 8)]
            public NET_DVR_SHOWSTRINGINFO[] struStringInfo;				
        };

        [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
        public struct NET_DVR_SHOWSTRINGINFO
        {
            /// <summary>
            /// 预览的图象上是否显示字符,0-不显示,1-显示 区域大小704*576,单个字符的大小为32*32
            /// </summary>
            public ushort wShowString;	
			/// <summary>
            /// 该行字符的长度,不能大于44个字符
			/// </summary>
            public ushort wStringSize;	
			/// <summary>
            /// 字符显示位置的x坐标
			/// </summary>
            public ushort wShowStringTopLeftX;		
            /// <summary>
            /// 字符名称显示位置的y坐标
            /// </summary>
            public ushort wShowStringTopLeftY;	
	        /// <summary>
            /// 要显示的字符内容
	        /// </summary>
            [MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 44)]
            public string sString;				    
        }

//设置服务器参数
        [DllImport("HCNetSDK.dll")]
        public static extern int NET_DVR_SetDVRConfig(int lUserID, int dwCommand, int lChannel, IntPtr lpInBuffer, int dwInBufferSize);
        
        [DllImport("HCNetSDK.dll")]
        public static extern int NET_DVR_GetDVRConfig(int lUserID, int dwCommand, int lChannel, IntPtr lpInBuffer, int dwInBufferSize, ref int len);
  public void InfoBtn_Click(object sender, EventArgs e)
        {
            NET_DVR_SHOWSTRING_V30 ShowStruct = new NET_DVR_SHOWSTRING_V30();
            int len = 0;
            IntPtr ptr = Marshal.AllocCoTaskMem(Marshal.SizeOf(ShowStruct));
            Marshal.StructureToPtr(ShowStruct, ptr, false);
            int err = NET_DVR_GetDVRConfig(m_lUserID, 1030, 1, ptr, Marshal.SizeOf(ShowStruct), ref len);

            ShowStruct = (NET_DVR_SHOWSTRING_V30)Marshal.PtrToStructure(ptr, typeof(NET_DVR_SHOWSTRING_V30));
            ShowStruct.struStringInfo[0].sString = "你好呀!我是用来测试的叠加字符串!!!";
            ShowStruct.struStringInfo[0].wShowString = 1;
            ShowStruct.struStringInfo[0].wShowStringTopLeftX = 10;
            ShowStruct.struStringInfo[0].wShowStringTopLeftY = 10;
            ShowStruct.struStringInfo[0].wStringSize = 44;

            IntPtr ptrNow = Marshal.AllocCoTaskMem(Marshal.SizeOf(ShowStruct));
            Marshal.StructureToPtr(ShowStruct, ptrNow, false);
            err = NET_DVR_SetDVRConfig(m_lUserID, 1031, 1, ptrNow, Marshal.SizeOf(ShowStruct));
//return err;
        }
            

添加后显示效果如图:

愚笨的我又遇到了几个问题,

要如何把我写入的值全部显示出来呢??? 

NET_DVR_SaveRealData保存视频文件没有内容(即大小为0KB),获取报错值为12(说是:请先打开预览),关键是我预览是打开的NET_DVR_RealPlay_V40的返回值m_lRealHandle也是有值的,还是不行!所以我要怎么才能保存视频???

求解!!!

欢迎知道的大神分享!!!

请求知道的大神指教!!!

代码是Right Here 的专栏_Softwaring_CSDN博客-Linux,Others,Windows领域博主在关于字幕叠加(远程控制),如何实现?[c#][海康]-CSDN社区这里回复的,我看了博主的专栏,没有专门发布过,不忍心就这样看着这个方法石沉大海,所以冒昧以原创来发布了,感谢博主!!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于海康摄像头OSD字幕叠加(.NET/C#/Formwork) 的相关文章

  • git submodule

    此文已由作者张磊薪授权网易云社区发布 欢迎访问网易云社区 xff0c 了解更多网易技术产品运营经验 前言 submodule 目前对 git 仓库拆分的已有实现之一 环境 git version 2 7 4 windows 1 准备工作 首
  • FreeRTOS 通信方式

    文章目录 一 消息队列二 信号量三 互斥量四 事件五 通知 一 消息队列 消息队列是一种常用于任务间通信的数据结构 xff0c 队列可以在任务与任务间 中断和任务间传递信息 读写队列均支持超时机制 1 创建队列 QueueHandle t
  • 芯片、模组、开发板的区别与联系-结合ESP32浅谈

    1 从外形说起 xff1a 1 1芯片 没错 xff0c 这块黑色的小硅片就是 芯片 本体 xff08 通常比大拇指还小 xff0c 内部集成了实现特定功能的硬件集成电路 xff09 1 2模组 由上述芯片研发的模组是这样的 xff1a 从
  • 一文读懂局域网、广域网、WLAN、WiFi的联系与区别

    1 引言 最近总有小伙伴问我 xff0c 广域网 局域网的区别与联系 WLAN与WiFi的关系 xff0c 遂写此文 xff0c 以作解答 2 广域网与局域网 广域网 xff08 Wide Area Network xff09 xff0c
  • RTOS 和裸机系统的异同-基于 ESP32 学习双核 FreeRTOS 的使用

    Learning FreeRTOS with esp32 什么是 RTOS 其本质上是运行在小型嵌入式设备上的特殊软件 系统软件 如同手机的安卓系统软件 windows 系统软件 RTOS VS 裸机系统 传统的裸机系统 xff08 无操作
  • u盘打开之后就只有一个快捷方式

    我今天也出现了这种问题 xff0c 百度一下发 现都解决不了 xff0c 然后自己尝试了一个新的方法 xff1a 其实还有一个又简单又好用又快捷的方法就是 1 只要你记得你的U盘里的任何一个文件或者文件夹的名称 xff0c 2 然后搜索U盘
  • FreeRTOS 删除任务

    FreeRTOS 删除任务 概述 任务的删除使用的 API 为 xff1a void vTaskDelete TaskHandle t xTask 任务删除主要是两种情况 xff1a 自删除 xff0c 即在任务本身的 TaskCode 中
  • 使用 stream buffer 传递数据

    使用 stream buffer 传递数据 概述 如前所述 xff0c 队列虽然提供了任务之间传递数据的功能 xff0c 但没有对通知机制进行优化 xff0c 即不方便实现多次采集不同长度的数据 xff0c 然后触发一次通知接收的机制 特性
  • 使用 message buffer 传递数据

    使用 message buffer 传递数据 概述 MessageBuffer xff0c 即消息缓冲区 xff0c 是在流式缓冲区的基础上实现的针对离散消息的专用通信组件 xff0c 其进一步针对 消息 进行设计改进 在 StreamBu
  • FreeRTOS 任务间通信与同步总结

    FreeRTOS 任务任务同步与数据传递 xff08 通信 xff09 总结 概述 本章主要介绍了 RTOS 系统中数据传递的机制 根据数据传递的目的 xff0c 可以分为同步 消息通信两种 其中同步是指协调程序运行的先后顺序 xff0c
  • RTOS 中 Task 之间资源共享示例

    RTOS 中 Task 之间资源共享示例 什么是共享资源 大型项目往往需要创建多个任务 xff0c 任务之间协同合作完成一个大型的功能 在前述的章节中 xff0c 我们讲述了任务间的同步与通信 xff0c 但合作与竞争总是相辅相成的 任务
  • RTOS共享资源保护-优先级反转与解决策略

    RTOS 中的优先级反转与解决策略 概述 上节讲述了可以使用二值信号量实现任务 任务之间的共享资源的保护 二值信号量的确完成了保护共享资源的任务 但在一些情况下 这种策略会带来副作用 即优先级反转 优先级反转是如何产生的 理想情况下 按照我
  • RTOS 驱动开发篇-通过 RTOS 组件实现按键驱动-优化1

    RTOS 驱动开发篇 通过 RTOS 组件实现按键驱动 优化1 概述 一个好的驱动程序需要数据关系清晰 代码可复用性高 并且便于维护 如在 RTOS 驱动开发篇 通过 RTOS 组件实现按键驱动1 中所述的那样 当前的按键驱动代码只是为了让
  • RTOS 驱动开发篇-通过 RTOS 组件实现按键驱动-优化2

    RTOS 驱动开发篇 通过 RTOS 组件实现按键驱动 优化2 概述 一个好的驱动程序需要数据关系清晰 代码可复用性高 并且便于维护 如在 RTOS 驱动开发篇 通过 RTOS 组件实现按键驱动1 中所述的那样 基础版本的按键驱动代码只是为
  • 物联网应用选择 RTOS 还是 Linux?

    物联网应用选择 RTOS 还是 Linux Linux VS RTOS xff0c 我该选哪个 xff1f 引言 在开发设备或系统时 xff0c 您需要做出的最早和最关键的决定之一就是决定它将运行哪种类型的操作系统 操作系统是基于特定硬件的
  • 嵌入式编程中的 __attribute__ 到底是什么

    嵌入式编程中的 attribute 到底是什么 相信阅读嵌入式代码的老铁经常看到一些类型定义 变量 函数有 attribute 标识符 xff0c 这个标识符号到底是做什么的 xff1f 有哪些用法 xff0c 咱们今天就来聊一聊 attr
  • opengl之glTranslatef()函数和glRotatef()函数和glLoadIdentity()函数

    glLoadIdentity 将当前的用户坐标系的原点移到了屏幕中心 xff1a 类似于一个复位操作 1 X坐标轴从左至右 xff0c Y坐标轴从下至上 xff0c Z坐标轴从里至外 2 OpenGL屏幕中心的坐标值是X和Y轴上的0 0f点
  • 一文读懂大端、小端、字节序、MSB、LSB、MSBs、LSBs

    大端 小端 字节序 MSB LSB MSBs LSBs 5分钟完全理解上述嵌入式 物联网开发中很扯蛋的几个被玩坏概念 MSB LSB 对于涉及 bit 流的概念中 MSB xff08 Most Significant Bit xff09 x
  • 飞控串口通信接入linux

    1 串口设置 2 串口接入 3 消息传输 4 消息透传 5 mavlink解析 1 mavlink库 将mavlink库添加至项目包含目录 2 常用mavlink消息 mavlink heartbeat t 心跳包 mavlink atti
  • python的函数修改外部传入的参数的问题

    span class token keyword def span span class token function test span span class token punctuation span df span class to

随机推荐

  • 树莓派笔记8:UDP传输视频帧

    因为我在自己笔记本电脑上没能成功安装OpenCV Contrib模块 xff0c 因此不能使用人脸识别等高级功能 xff0c 不过已经在树莓派上安装成功了 xff0c 所以我想实现把树莓派上采集的视频帧传输到PC的功能 xff0c 这样可以
  • 15.linux中的源码安装,SRPM包安装,rpmbild,spec详解

    前言 本小节会详细讲解在linux中如何进行源码编译安装 xff0c SRPM包的两种安装方式 xff0c rpmbuild spec的使用方法 文章目录 前言源码安装和卸载源码安装介绍安装gcc安装源码包Linux源码包卸载 SRPM包的
  • zephyr中消息队列和邮箱的主要区别点

    简单列一下而已 xff0c 想到什么就列了什么 xff1a 1 邮箱既可以同步也可以异步 xff0c 消息队列只可以异步 xff1b 2 邮箱包含Send和Recv两个消息队列 xff0c 消息队列仅仅包含一个用于消息传输的队列 3 邮箱不
  • Windows/Linux客户端挂载NFS共享存储

    Windows Linux客户端挂载NFS共享存储 1 Linux搭建NFS共享存储1 1 NFS概述1 2 安装并配置NFS Server1 3 启动并验证NFS Server 2 客户端挂载NFS共享存储2 1 Windows操作系统挂
  • WIN10源码编译安装QGC-V3.4

    WIN10源码编译安装QGC V3 4 20190228更新 整个安装过程的流程为 xff0c 先安装VS2015 xff0c 再安装Git 用Git来下载qgroundcontrol代码 xff0c 最后下载Qt 用Qt对qgroundc
  • ESP8266简介

    ESP8266 是一款适用于物联网和家庭自动化项目的 Wi Fi 模块 ESP8266 是一个 10元人名币的 Wi Fi 模块 它允许您像使用 Arduino 一样控制输入和输出 xff0c 但它带有 Wi Fi 因此 xff0c 它非常
  • 多任务操作系统是如何切换进程

    多任务操作系统在并行执行多任务时 xff0c 实际上是不断地在任务间进行切换的 xff0c 也就是切换上文 首先要保存前一个进程的上下文 xff0c 然后调度一个就绪的进程 xff0c 并载入该进程的上下文 xff0c cpu开始执行该进程
  • python爬虫爬取淘宝网页

    首先进行相关的分析 要想爬取相关的信息 xff0c 必须指导如下信息 xff1a 1 访问接口 2 翻页操作 首先进行搜索 xff0c 得到相关的网址 xff1a https s taobao com search q 61 书包 amp
  • Ceres使用经验之柯西核函数

    原理 在优化中 xff0c 经常会遇见有异常值的情况 xff0e 如在直线拟合中 xff0c 可能会出现若干个不在直线上点 xff0c 此时如果每一个点的权重一样 xff0c 就会导致求得的直线方程不理想 xff0e 为了增强优化过程中对异
  • PHPStrom2018最新版软件汉化教程,绝对靠谱

    phpstorm2018中文汉化包 是专门为phpstorm2018最新软件推出的汉化破解补丁 xff0c 帮助各位汉化和免费使用该软件 xff1b 它是一款非常不错的软件 xff0c 是jetbrains打造的一款轻量级IDE集成开发环境
  • js实现冒泡排序

    span class token comment 冒泡排序 span span class token keyword var span arr span class token operator 61 span span class to
  • 图片水平或垂直滚动

    在vue项目中引用外部插件VueImgSlider vue xff1a import VueImgSlider from 39 components VueImgSlider vue 39 export default name 39 we
  • MCU常见的操作系统介绍

    MCU微控制器几种常见的操作系统各自的优缺点介绍 目录 一 FreeRTOS 二 uC OS II 三 C OS III 四 RT Thread 一 FreeRTOS FreeRTOS是一款免费 开源的实时操作系统 xff08 RTOS x
  • 初学者如何学习人工智能收藏

    在CSDN上看到一篇关于初学人工智能的帖子 xff0c 分享给大家 xff0c 希望有用 原文链接 xff1a http bbs jointforce com topic 22613 全文如下 xff1a 一 机器学习 有关机器学习领域的最
  • freeRTOS中队列发送数组(数组成员是结构体类型)

    typedef struct icm42607 sensor data packet t int8 t head int8 t temp degc int16 t reserve0 int16 t accel g 3 int16 t res
  • tracealyzer的使用方法

    61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61
  • arm汇编指令探究之 ldmia

    ldmia r0 r4 r11 r14 的意思是 LDMIA 中的 I 是 increase 的缩写 xff0c A 是 after 的缩写 xff0c LD加载 load 的意思 R0后面的感叹号 xff01 表示会自动调节 R0里面的指
  • arm汇编指令探究之STMFD和LDMIA指令的使用

  • 汇编输入输出(单个字符以及字符串)

    简单的汇编代码演示 简单的汇编代码演示 1输入输出 1 INT 16HROM BIOS中断1 INT 21HDOS中断 2字符串的输入 1 输入输出 输入输出主要有两个中断调用 xff0c 分别为INT 16H 和INT 21H 1 1 I
  • 关于海康摄像头OSD字幕叠加(.NET/C#/Formwork)

    刚接触摄像头代码的编写 xff0c 这里记录一下吧 xff01 记录一下我挨打的过程 xff01 xff01 在摄像头里面添加字符串 xff0c 困扰了很久 xff0c 资料也看了很多 xff0c 海康官网的文档看了也不是很懂 xff0c