C#实时监控指定文件夹中的动态,并将文件夹中生成的新图片显示在界面上(相机采图,并且从本地拿图)

结果展示

此类原理适用于文件夹中自动生成图片,并提取最新生成的图片将其显示,

如果你是相机采图将其保存到本地,可以用这中方法可视化,并将检测的结果和图片匹配

理论上任何文件都是可以监视并显示的,我这里只是做了一个图片的实例。

用vs2022或者其他的C#编写软件,创建一个winform程序

界面可以随意设计

主流程代码实例参考

private void btnStart_Click1(/*object sender, EventArgs e*/)
{// 创建FileSystemWatchertry{watcher = new FileSystemWatcher{Path = Path0,Filter = "*.bmp", // 可以根据需要修改为其它格式,如 *.pngNotifyFilter = NotifyFilters.FileName | NotifyFilters.LastWrite};//richTextBox2.Text = "开始监听……………………………………\n";log.AddInLog("开始监听……………………………………\n");// 订阅事件watcher.Created += OnNewImageAdded;// 启动监视器watcher.EnableRaisingEvents = true;//this.Load += (s,e) => LoadImages();}catch (Exception){log.AddInLog("请确认输入的图片格式或者读取路径是否有误!!!");}}

监视事件并且触发显示样本部分

private  void ShowNextImage()
{watch.Restart();if (imageFiles.Length == 0) return;currentIndex = (currentIndex + 1) % imageFiles.Length; // 循环显示图片var imagePath = imageFiles[currentIndex];var latestImage = imageFiles.LastOrDefault();while (true){if (File.Exists(latestImage))//判断文件是否存在 为了保险 实际消息触发文件必存在{long fileSize = new FileInfo(latestImage).Length;Thread.Sleep(20);if (fileSize > 0.02 * 1024 * 1024)  //MB转化为字节 判断当前文件大小{Thread.Sleep(500);//在等一会break;}}else{break;}}//await Task.Delay(100);//string ss = "E:\\AING\\Sick\\TESTIMAGE\\1\\1.bmp";Bitmap map = new Bitmap(latestImage);int width1 = 960;int height1 = 1280;Bitmap mapsizes = ResizeImage(map, width1, height1);//mapsizes.Save("E:\\AING\\Sick\\TESTIMAGE\\2\\9.jpg");// 显示最新添加的图片if (!string.IsNullOrEmpty(latestImage)){pictureBox1.Image?.Dispose();pictureBox1.Image = mapsizes;                watch.Stop();//ReceiveDataAsync();//if (message == "OK")//{//    richTextBox1.Text = message;//    richTextBox1.BackColor = Color.GreenYellow;//}//else if (message == "NG")//{//    richTextBox1.Text = message;//    richTextBox1.BackColor = Color.Red;//}//richTextBox2.Text = watch.ElapsedMilliseconds.ToString() + "   ms";//richTextBox2.Text = "最新样本路径: " + latestImage + " \n样本检测反馈结果:    \n" + message + "\n\n" + "Time:" + watch.ElapsedMilliseconds.ToString() + "   ms";log.AddInLog("新样本:\n" + latestImage);log.AddInLog("样本反馈:" + message);log.AddInLog("时间:" + watch.ElapsedMilliseconds.ToString());}
}

 链接tcp接收结果字符串部分

private void MCProtocolLibTest()
{try{client = new TcpClient("192.168.0.2", 5000); // 服务器地址和端口stream = client.GetStream();log.AddInLog("192.168.0.2 连接成功…… \n");// 开始接收数据                //Thread.Sleep(1000);ReceiveDataAsync();}catch (Exception){richTextBox2.Text = "192.168.0.2 连接失败…… \n";}
}
private async Task ReceiveDataAsync()
{byte[] buffer = new byte[1024];int bytesRead;try{while ((bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length)) != 0){message = Encoding.UTF8.GetString(buffer, 0, bytesRead);if (message == "OK"){richTextBox1.Text = message;richTextBox1.BackColor = Color.GreenYellow;}else if (message == "NG"){richTextBox1.Text = message;richTextBox1.BackColor = Color.Red;}//message = displayText;//UpdateLabel(message); // 更新Label控件}}catch (Exception ex){richTextBox1.Text = "数据接收出现问题……";//MessageBox.Show("接收数据时出现错误: " + ex.Message);}
}
private void UpdateLabel(string message)
{if (richTextBox2.InvokeRequired){richTextBox2.Invoke(new Action<string>(UpdateLabel), message);}else{richTextBox2.Text += message + Environment.NewLine; // 显示接收到的消息}
}

 样本多了可能导致内存盘崩盘 所以你可以设置一个每周一提示是否删除文件夹中的所有图片

private void Form1_Load2(/*object sender, EventArgs e*/)
{// 检查当前日期是否为周一if (DateTime.Today.DayOfWeek == DayOfWeek.Monday){// 显示删除确认对话框DialogResult result = MessageBox.Show("今天是周一是否清空文件夹中采集的样本!!!", "删除确认", MessageBoxButtons.YesNo);if (result == DialogResult.Yes){// 指定文件夹路径string folderPath = Path0;// 删除文件夹中的所有图片文件if (Directory.Exists(folderPath)){string[] files = Directory.GetFiles(folderPath, "*.bmp");foreach (string file in files){File.Delete(file);}MessageBox.Show("图片删除成功!");}else{MessageBox.Show("指定文件夹不存在!");}}               }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/486962.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机毕业设计SpringBoot+Vue.js知识图谱课程推荐系统 课程预测系统 mooc慕课课程爬虫 课程大数据 课程数据分析大屏 大数据毕业设计 大

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

day05-开发接口-学习记录和学习计划

1. 查询用户的课程学习记录 1.1 代码实现 Controller层&#xff1a; package com.tianji.learning.controller;import com.tianji.api.dto.leanring.LearningLessonDTO; import com.tianji.learning.service.ILearningLessonService; import com.tianji.learning.service.IL…

【C++】指针与智慧的邂逅:C++内存管理的诗意

文章目录 RAII 智能指针auto_ptrunique_ptr shared_ptr模拟实现定制删除器循环引用 和 weak_ptr RAII RAII&#xff08;Resource Acquisition Is Initialization&#xff09;是一种广泛应用于 C 等编程语言中的编程范式&#xff0c;它的核心思想是&#xff1a;资源的获取和释放…

Elasticsearch vs 向量数据库:寻找最佳混合检索方案

图片来自Shutterstock上的Bakhtiar Zein 多年来&#xff0c;以Elasticsearch为代表的基于全文检索的搜索方案&#xff0c;一直是搜索和推荐引擎等信息检索系统的默认选择。但传统的全文搜索只能提供基于关键字匹配的精确结果&#xff0c;例如找到包含特殊名词“Python3.9”的文…

探索ai一键生成PPT的未来

在当今快节奏的工作环境中&#xff0c;如何高效地完成PPT制作任务&#xff0c;已经成为了许多人追求的目标。无论是职场精英&#xff0c;还是创业者&#xff0c;每个人都希望通过智能工具来提高工作效率。而AI生成PPT&#xff0c;尤其是利用一些先进的自动生成PPT技术&#xff…

vue-router查漏补缺

一、动态路由匹配 1.带参数的动态路由匹配 import User from ./User.vue// 这些都会传递给 createRouter const routes [// 动态字段以冒号开始{ path: /users/:efg, component: User }, ]这种方式的路由会匹配到/users/abc或者/users/123,路径参数用冒号:表示&#xff0c;并…

013路由协议-OSPF

OSPF具有更适用于规模较大的网络环境&#xff0c;收敛更快速、依据带宽来计算路径成本等。 计算方式&#xff1a; 100M/当前端口的带宽 如果小于1就按照1来计算 例如&#xff1a; 当前端口的带宽是1.54M 路径成本 100/1.54 65 当前端口的带宽是 1000M 路径成本 100/100 0.…

快捷构建AI大模型,源码自取可直接运行

Node.js 和 WebSocket 实现一个基于kimi&#xff08;Moonshot 月之暗大模型&#xff09;的AI工具 前端&#xff1a;前端界面比较容易&#xff0c;只需要简单的额css js即可&#xff0c;本文使用vue作为作为demo。 后端&#xff1a;我java很垃圾&#xff0c;写不出好的代码&am…

探索云原生安全解决方案的未来

我们是否充分意识到云端所面临的网络安全威胁&#xff1f; 在当今互联互通的世界中&#xff0c;维护安全的环境至关重要。云的出现扩大了潜在威胁的范围&#xff0c;因为它催生了机器身份&#xff08;称为非人类身份 (NHI)&#xff09;及其秘密。随着组织越来越多地转向云原生…

关于利用 EtherNet/IP 转 Profinet 网关模块实现罗克韦尔变频器接入西门子 PLC 的配置范例

在现代工业自动化领域&#xff0c;不同品牌设备之间的通信兼容性问题一直是企业面临的挑战之一。某智能工厂为了优化生产流程&#xff0c;提高设备的协同工作效率&#xff0c;决定对其生产线上的控制系统进行升级改造。该生产线中&#xff0c;AB罗克韦尔PowerFlex变频器作为关键…

Ajax--实现检测用户名是否存在功能

&#xff08;一&#xff09;什么是Ajax Ajax&#xff08;Asynchronous Javascript And XML&#xff09; 翻译成中文就是“异步JavaScript和XML”&#xff0c;即使用JavaScript与服务器进行异步交互&#xff0c;传输的数据为XML。 AJAX还可以在浏览器实现局部刷新的效果&#xf…

【LC】160. 相交链表

题目描述&#xff1a; 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 注意&…

算法设计1_分治

递归的概念 递归算法&#xff1a;一个直接或间接地调用自身的算法递归函数&#xff1a;使用函数自身给出定义的函数递归方程&#xff1a;对于递归算法&#xff0c;一般可把时间代价表示为一个递归方程解递归方程最常用的方法是进行递归扩展 阶乘函数 边界条件递归关系 n ! {…

基于yolov8的SAR影像目标检测系统,支持图像、视频和摄像实时检测【pytorch框架、python源码】

更多目标检测、图像分类识别、目标追踪等项目可看我主页其他文章 功能演示&#xff1a; 基于yolov8的SAR影像目标检测系统&#xff0c;支持图像、视频和摄像实时检测【pytorch框架、python源码】_哔哩哔哩_bilibili &#xff08;一&#xff09;简介 基于yolov8的SAR影像目标…

uni-app 设置缓存过期时间【跨端开发系列】

&#x1f517; uniapp 跨端开发系列文章&#xff1a;&#x1f380;&#x1f380;&#x1f380; uni-app 组成和跨端原理 【跨端开发系列】 uni-app 各端差异注意事项 【跨端开发系列】uni-app 离线本地存储方案 【跨端开发系列】uni-app UI库、框架、组件选型指南 【跨端开…

复现论文:PromptTA: Prompt-driven Text Adapter for Source-freeDomain Generalization

github&#xff1a;zhanghr2001/PromptTA: Source-free Domain Generalization 论文&#xff1a;[2409.14163] PromptTA: Prompt-driven Text Adapter for Source-free Domain Generalization 自己标注&#xff1a;PromptTA: Prompt-driven Text Adapter for Source-free Domai…

Dos脚本中的start命令

0 Preface/Foreword 1 Start介绍 start是用来启动一个应用或者一个bat脚本文件。 1.1 %*传递参数 %*&#xff1a;表示运行命令时传入的所有参数。 1.2 %processor_architecture% 系统处理器架构&#xff0c;内置变量。 echo %processor_architecture% 1.3 示例 echo He…

HTML笔记()蜘蛛纸牌之卡牌拖拽

效果 代码 <!DOCTYPE html> <html><head><style>body{display: flex;justify-content: center;align-items: center;height: 100vh;background-color: #2b2b2b;position: relative;}.card{/*设置卡牌的外观*/width: 150px;height: 200px;background-…

基于SSM的线上考试系统的设计与实现(计算机毕业设计)+万字说明文档

系统合集跳转 源码获取链接 一、系统环境 运行环境: 最好是java jdk 1.8&#xff0c;我们在这个平台上运行的。其他版本理论上也可以。 IDE环境&#xff1a; Eclipse,Myeclipse,IDEA或者Spring Tool Suite都可以 tomcat环境&#xff1a; Tomcat 7.x,8.x,9.x版本均可 操作系统…

vue 封装全局方法及使用

1.找到项目中的utils定义js&#xff0c;这个js存放全局可使用的方法 2.去项目中main.js中引入注册 import publicFun from ./utils/test Vue.prototype.$publicFun publicFun;3.项目使用 ddd(){this.$publicFun.testwen()},