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

news2025/1/10 2:57:34

结果展示

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

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

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

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

界面可以随意设计

主流程代码实例参考

private void btnStart_Click1(/*object sender, EventArgs e*/)
{
    // 创建FileSystemWatcher
    try
    {
        watcher = new FileSystemWatcher
        {
            Path = Path0,
            Filter = "*.bmp", // 可以根据需要修改为其它格式,如 *.png

            NotifyFilter = 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.coloradmin.cn/o/2257189.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

通过PS和Unity制作2D动画之一:创建形象

1、通过路径画出轮廓 使用路径的过程中&#xff0c;需要注意&#xff1a; 1&#xff09;如果使用形状工具作图&#xff0c;比如使用椭圆工具画正圆形&#xff0c;需要设置其属性为“路径”。 2&#xff09;使用路径选择工具&#xff0c;再按住Alt键点击某个路径&#xff0c;可…

Spark实训

实训目的: 介绍本实训的基本内容,描述知识目标、,以及本实训的预期效果等。 1、知识目标 (1)了解spark概念、基础知识、spark处理的全周期,了解spark技术是新时代对人才的新要求。 (2)掌握Linux、hadoop、spark、hive集群环境的搭建、HDFS分布文件系统的基础知识与应用…

PDF提取文本

1.环境配置 !pip install PyPDF2 pdfplumber PyPDF2 是用来处理 PDF 文件的库&#xff0c;主要功能包括PDF 文件读取、合并、拆分、旋转&#xff0c;可以从 PDF 中提取纯文本&#xff0c;尽管它的提取效果有限&#xff0c;特别是对于扫描版 PDF 文件。 pdfplumber 是比 PyPDF2…

如何在手机上玩电脑pc游戏,通过termux安装mobox教程说明

如何在手机上玩电脑pc游戏&#xff0c;通过termux安装mobox教程说明 所需软件 1.Termux 或改版 zeroTermux 2.Termux:X11 3.Inputbridge 以下为网盘链接 https://pan.baidu.com/s/1foEY0djqJTCrtYES9nE66g?pwd2ji2 提取码:2ji2 123 网盘 https://www.123pan.com/s/l5mlV…

create-react-app react19 搭建项目报错

报错截图 此时运行会报错&#xff1a; 解决方法&#xff1a; 1.根据提示安装依赖法 执行npm i web-vitals然后重新允许 2.删除文件法 在index.js中删除对报错文件的引入&#xff0c;删除报错文件

【Qt移植LVGL】QWidget手搓LVGL软件仿真模拟器(非直接运行图形库)

【Qt移植LVGL】QWidget手搓LVGL软件仿真模拟器&#xff08;非直接运行图形库&#xff09; 打包开源地址&#xff1a; Qt函数库gitee地址 更新以gitee为准 移植后的demo工程&#xff1a; gitee 有些没实现的 后续我会继续优化 文章目录 别碰瓷看清楚&#xff1a;是移植&#…

Python、R循环神经网络RNN、指数平滑ETS、ARIMA模型预测网络流量、ATM机取款、旅游需求时间序列数据...

全文链接&#xff1a;https://tecdat.cn/?p38496 分析师&#xff1a;Pengyuan Wen 在当今经济研究与商业决策领域&#xff0c;精准的时间序列预测具有极为关键的意义。社会消费品零售总额作为反映人民消费水平以及国民经济状况的核心指标&#xff0c;其发展趋势的精准把握对中…

甘肃美食之选:食家巷方形饼

甘肃食家巷方形饼&#xff0c;顾名思义&#xff0c;其形状呈规整的方形。这种独特的外形并非偶然&#xff0c;而是源于当地传统的制作工艺。制作方形饼的师傅们&#xff0c;精心挑选优质的面粉&#xff0c;加入适量的水和其他配料&#xff0c;揉成光滑的面团。经过一段时间的发…

linux——挂载nfs网络硬盘

&#xff08;一&#xff09;安装nfs服务 1、查看系统是否已经安装nfs rpm -qa | grep nfs rpm -qa | grep rpcbind 2、安装nfs 服务 yum -y install nfs-utils yum -y install rpcbind nfs 固定端口号 2049 rpc 固定端口号 111 &#xff08;二&#xff09;centos中服务…

网络安全中大数据和人工智能应用实践

传统的网络安全防护手段主要是通过单点的网络安全设备&#xff0c;随着网络攻击的方式和手段不断的变化&#xff0c;大数据和人工智能技术也在最近十年飞速地发展&#xff0c;网络安全防护也逐渐开始拥抱大数据和人工智能。传统的安全设备和防护手段容易形成数据孤岛&#xff0…

共筑数字安全防线,2024开源和软件安全沙龙即将启幕

随着数字化转型进程的加快以及开源代码的广泛应用&#xff0c;开源凭借平等、开放、协作、共享的优秀创作模式&#xff0c;逐渐成为推动数字技术创新、加速传统行业转型升级的重要模式。但随着软件供应链日趋复杂多元&#xff0c;使得其安全风险不断加剧&#xff0c;针对软件供…

4K高清壁纸网站推荐

1. Awesome Wallpapers 官网: https://4kwallpapers.com/ 主题: 创意、摄影、人物、动漫、绘画、视觉 分辨率: 4K Awesome Wallpapers 提供了丰富的高质量图片&#xff0c;分为通用、动漫、人物三大类&#xff0c;可以按屏幕比例和分辨率检索&#xff0c;满足你对壁纸的各种…

Java阶段三06

第3章-第6节 一、知识点 理解MVC三层模型、理解什么是SpringMVC、理解SpringMVC的工作流程、了解springMVC和Struts2的区别、学会使用SpringMVC封装不同请求、接收参数 二、目标 理解MVC三层模型 理解什么是SpringMVC 理解SpringMVC的工作流程 学会使用SpringMVC封装请求…

qt-C++语法笔记之mapToGlobal将组件(控件)中的本地坐标系(局部坐标)映射到全局坐标系

qt-C语法笔记之mapToGlobal将组件&#xff08;控件&#xff09;中的本地坐标系&#xff08;局部坐标&#xff09;映射到全局坐标系 code review! 文章目录 qt-C语法笔记之mapToGlobal将组件&#xff08;控件&#xff09;中的本地坐标系&#xff08;局部坐标&#xff09;映射到…

使用Kimi开发自己的问答应用

概述 Kimi是大家常用的一个人工智能助手&#xff0c;本文使用Kimi开发文档&#xff0c;以node作为后端&#xff0c;开发与一个问答系统 实现效果 Kimi简介 Kimi是由Moonshot AI开发的人工智能助手&#xff0c;擅长中文和英文对话。目标是帮助用户解决问题、提供信息和执行任…

从零开始:Linux 环境下的 C/C++ 编译教程

个人主页&#xff1a;chian-ocean 文章专栏 前言&#xff1a; GCC&#xff08;GNU Compiler Collection&#xff09;是一个功能强大的编译器集合&#xff0c;支持多种语言&#xff0c;包括 C 和 C。其中 gcc 用于 C 语言编译&#xff0c;g 专用于 C 编译。 Linux GCC or G的安…

ElasticSearch如何做性能优化?

大家好&#xff0c;我是锋哥。今天分享关于【ElasticSearch如何做性能优化&#xff1f;】面试题。希望对大家有帮助&#xff1b; ElasticSearch如何做性能优化&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 Elasticsearch 中&#xff0c;性能优化是…

Flask 是什么?

近期开发chatbot 程序&#xff0c;过程中要使用Flask&#xff0c;所以收集资料记录这个套件的信息&#xff1a; Flask 是什么&#xff1f; Flask 是一个轻量级、模块化的 Python Web 框架&#xff0c;用于构建 Web 应用程序和 API。它被设计为简单、灵活且可扩展&#xff0c;…

北京大学《操作系统原理》(陈向群主讲)课堂笔记(一)

北京大学《操作系统原理》&#xff08;陈向群主讲&#xff09;课堂笔记&#xff08;一&#xff09; 一、操作系统概述 1.1、操作系统做了什么&#xff1f; 以c语言helloworld为例子&#xff1a; #include<stdio.h> int main(int argc, char *argv[]) {puts("hello…

计算c++11 lambada表达式的大小

lambada表达式是什么? 详解&#xff1a;lambada表达式详解 我们知道lambada其实是一个匿名函数 &#xff0c; 它属于 可调用对象 类型。在 C 中&#xff0c;lambda 表达式会生成一个隐式定义的类&#xff0c;这个类重载了 operator()&#xff0c;使得该对象可以像函数一样被…