图片变更检测

20240723

By wdhuag


目录

前言:

参考:

文件监控:

图片占用问题:

源码:


前言:

由于第三方图像处理软件不能回传图片(正常都能做,这里只是不想做),只能在保存到本地后,读取并显示结果图片。


参考:

C# FileSystemWatcher 实时监控文件的增加、修改、重命名和删除实例-CSDN博客

C#实时监测文件夹变化_c# 实时读取本地文件更新的数据-CSDN博客

C# 获得文件夹下最新的,或更早的文件_c#仅入库最新文件-CSDN博客

C# winform实现文件夹中图片的监控并实时显示更新_csdn winform 实时监测指定文件夹-CSDN博客

C# 加载和传递图片,导致内存溢出的问题_winform 内存溢出-CSDN博客

https://www.cnblogs.com/dongweian/p/15554614.html

https://www.cnblogs.com/TandyChan/p/4819672.html

c# - 将 PictureBox 中的图像调整到尽可能大,同时保持纵横比?_Stack Overflow中文网

windows 文件夹正在使用 “操作无法完成,因为其中的文件夹或文件已在另一程序中打开“ 解决办法_无法装载该文件,因为该文件正在使用-CSDN博客

[总结]C#用于BMP图像显示的方法_c# 拉伸显示bmp-CSDN博客

C#项目中pictureBox控件动态加载显示BMP文件_c# picturebox bmp-CSDN博客

C#中pictureBox控件详细使用方法_c# picturebox-CSDN博客

C#解析RAW图文件并在PictureBox中显示_c#显示raw-CSDN博客

https://www.cnblogs.com/jackrebel/p/3964495.html

c# 判断路径是否存在-CSDN博客

c# 识别图片格式的方法_c#判断图片类型-CSDN博客

C#中Image.FromFile(string path)函数报内存不足错误解决方法_c# 内存不足 fromimage-CSDN博客

关于Image.FromFile方法处理图像出现内存不足的问题_image.fromfile 内存不足-CSDN博客

C# 图片操作(图片读取,保存,转换,传输)_c# png图片通过bitmap显示-CSDN博客


文件监控:

这里选用的是FileSystemWatcher

FileSystemWatcher fileSystemWatcher;
string type;
string filter;type = comboBox_MonitorType.Text.Replace("*", "");
filter = textBox_Name.Text;
fileSystemWatcher = new FileSystemWatcher();
fileSystemWatcher.Path = folderPath;
fileSystemWatcher.NotifyFilter = NotifyFilters.FileName | NotifyFilters.DirectoryName | NotifyFilters.Size;
fileSystemWatcher.IncludeSubdirectories = true;
fileSystemWatcher.Created += new FileSystemEventHandler(Monitor_Created);
fileSystemWatcher.Changed += new FileSystemEventHandler(Monitor_Changed);
fileSystemWatcher.Deleted += new FileSystemEventHandler(Monitor_Detected);
fileSystemWatcher.Renamed += new RenamedEventHandler(Monitor_Renamed);
fileSystemWatcher.EnableRaisingEvents = true;

图片占用问题:

需要检测文件是否被占用

private bool CheckInUse(string path) {int count = 0;Stopwatch sw = Stopwatch.StartNew();
Retry:if (sw.ElapsedMilliseconds > 3000) {sw.Stop();return false;}else {count++;}try {FileStream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read);fileStream.Close();return true;}catch (Exception ex) {goto Retry;}
}

读取图片后需要转换避免占用 

private Bitmap FileToBitmap(string path) {byte[] bytes = null;Stream stream = null;MemoryStream memoryStream = null;try {FileStream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read);bytes = new byte[fileStream.Length];fileStream.Read(bytes, 0, bytes.Length);fileStream.Close();stream = new MemoryStream(bytes);stream.Read(bytes, 0, bytes.Length);stream.Seek(0, SeekOrigin.Begin);memoryStream = new MemoryStream(bytes);return new Bitmap((Image)new Bitmap(memoryStream));}catch (ArgumentNullException ex) {return null;}catch (ArgumentException ex) {return null;}finally {if (stream != null)stream.Close();}
}

 图像输出后释放资源避免占用

this.pictureBox_LastImage.Image?.Dispose();
this.pictureBox_LastImage.SizeMode = PictureBoxSizeMode.Zoom;
if (image != null) {this.pictureBox_LastImage.Image = (Bitmap)image.Clone();image.Dispose();
}
else {this.pictureBox_LastImage.Image = null;
}
GC.Collect();

源码:

链接:度盘 
提取码:00yr 


END 

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

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

相关文章

Postman接口测试工具的使用

一、postman简介 Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件。作用:常用于进行接口测试。不需要安装。 特征:简单,实用,美观,大方。 二、Postman接口测试工具的使用 Postman不需要安…

Emacs vs IDE:用Emacs写程序真的更方便吗?

前言 在程序员的世界里,选择合适的开发工具至关重要。Emacs作为一种历史悠久且功能强大的文本编辑器,因其灵活性和扩展性吸引了许多程序员。那么,Emacs究竟有哪些优点?用Emacs写程序真的比使用现代IDE更方便吗?本文将…

MySQL的账户管理

目录 1 密码策略 1.1 查看数据库当前密码策略: 1.2 查看密码设置策略 1.3 密码强度检查等级解释(validate_password.policy) 2 新建登录账户 3 账户授权 3.1 赋权原则 3.2 常见的用户权限 3.3 查看权限 3.4 赋权语法 4 实例 4.1 示例1&#x…

python脚本制作循环执行命令行

python import subprocess import sysif __name____main__:ret 1while ret!0:ret subprocess.call(sys.argv[1:], textTrue)pack pip install pyinstaller pyinstaller --onefile loop.py 使用场景 使用上面生成的loop.exe调用cmd命令,执行失败了返回值&#xf…

项目实战二

Git 服务器 公共代码平台GitLab 配置gitlab 1.设置管理员帐号密码 2.让程序员传代码到20主机上需要配置: 创建用户 mark 1234.com 创建用户组devops 然后把mark 添加到devons 创建项目 http://192.168.88.20/devops/myproject.git 3.客户端操作&#x…

Spring Boot下数据隐私守护者:四大脱敏策略实战解析

文章目录 SpringBoot数据脱敏的四种实现方案数据脱敏概述什么是数据脱敏数据脱敏的分类 Spring Boot 实现数据脱敏的常见方案统一的脱敏处理工具类自定义注解与拦截器AOP(面向切面编程)Jackson 自定义序列化MyBatis 拦截器 详细案例使用自定义注解与拦截…

textblob文本处理、词性分析与情感分析

1 前言 textBlob 是一個简单易用的 NLP库,基于 NLTK 和 pattern库, 提供了文本处理和情感分析等功能。 安装 textblob0.18.0 nltk3.8.1测试环境:Python3.10.9 使用前,先运行下面代码先下载些文件 import nltk nltk.download…

C#医学影像管理系统源码 PACS系统源码带三维重建,全院级数字医学影像系统

C#医学影像管理系统源码 医学影像存储与传输系统源码 PACS系统源码带三维重建,三甲以下医院都能满足。 PACS系统模块组成 : 工作站: 分诊工作站、超声工作站、放射工作站、内镜工作站、病理工作站。 基本信息维护: 输入模板、输入…

C语言从头学37——struct 指针

在前文学习结构体变量的声明时,曾介绍过结构体指针变量的使用。这里介绍结构体指针,目的是找出在函数中处理作为参数的结构体变量的方法。 一、先看一个普通结构体变量作为参数的程序 typedef struct { int a; } myInt; //定义结构体别名(别…

Milvus 核心组件(3)--- MinIO详解

目录 背景 MinIO 安装 docker desktop 安装 Ubuntu UI 在 docker 中的安装 Minio 下载及安装 启动minio docker image 保存 启动 minio web 网页 下一次启动 MinIO基本概念 基本概述 主要特性 应用场景 MinIO 使用 连接server 创建bucket 查询bucket 上传文件…

Springboot集成Nacos配置

参考文档 Nacos 融合 Spring Boot&#xff0c;成为注册配置中心 | Nacos 官网​​​​​​​ 版本 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.1.RELE…

Layer2区块链扩容方案(1)——总述

写在前面 这篇文章作为一个简单介绍&#xff0c;很多技术只是大致提及或者引用&#xff0c;之后会在详细学习后逐项解释。 补充知识 在了解扩容方案之前&#xff0c;我们最好了解一些相关的知识概念 EVM “EVM” 是“Ethereum Virtual Machine”&#xff08;以太坊虚拟机&…

相机的内参与外参

目录 一、相机的内参二、相机的外参 一、相机的内参 如下图所示是相机的针孔模型示意图&#xff1a; 光心O所处平面是相机坐标系(O&#xff0c;P)&#xff0c;像素平面所在坐标系为像素坐标系(O’&#xff0c;P’)。 焦距f&#xff1a;O到O’的距离 相机的内参表示的是相机坐标…

100个python的基本语法知识【上】

0. 变量和赋值&#xff1a; x 5 name “John” 1. 数据类型&#xff1a; 整数&#xff08;int&#xff09; 浮点数&#xff08;float&#xff09; 字符串&#xff08;str&#xff09; 布尔值&#xff08;bool&#xff09; 2. 注释&#xff1a; # 这是单行注释 ""…

SQL Server数据迁移新纪元:数据库数据泵(Data Pump)使用指南

SQL Server数据迁移新纪元&#xff1a;数据库数据泵&#xff08;Data Pump&#xff09;使用指南 在数据管理的世界里&#xff0c;数据迁移是一个常见且复杂的过程。SQL Server提供了一个强大的工具——数据库数据泵&#xff08;Data Pump&#xff09;&#xff0c;它可以帮助我…

mysql面试(三)

MVCC机制 MVCC&#xff08;Multi-Version Concurrency Control&#xff09; 即多版本并发控制&#xff0c;了解mvcc机制&#xff0c;需要了解如下这些概念 事务id 事务每次开启时&#xff0c;都会从数据库获得一个自增长的事务ID&#xff0c;可以从事务ID判断事务的执行先后…

QT 信号槽机制

核心函数为 QMetaObject::Connection QObject::connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type Qt::AutoConnection) 参数为 1.信号发生对象 2.信号发生对象的信号 3.槽对象 4.槽对象的槽函…

嵌入式linux系统中压力测试的方法

在Linux环境下,确保系统各项资源充分且稳定地运行对任何系统管理员来说都至关重要。特别是在生产环境中,理解如何对系统资源进行基准测试和压力测试可以帮助预防未来的问题,同时也能够优化现有系统的性能。 在本文中,我们将探讨如何使用命令行工具来对Linux系统的CPU、内存…

C语言 ——— 函数指针的定义 函数指针的使用

目录 何为函数指针 打印 函数名的地址 及 &函数名的地址 函数指针的代码&#xff08;如何正确存储函数地址&#xff09; 函数指针的使用 何为函数指针 类比&#xff1a; 整型指针 - 指向整型数据的指针&#xff0c;整型指针存放的是整型数据的地址 字符指针 - 指向字…

SQLynx数据库管理工具

背景&#xff1a;业主对网络安全要求比较高&#xff0c;不提供VPN等远程工具&#xff0c;也不能开放3306端口到互联网。那怎么样运维数据库就是个难题&#xff1f;找到了SQLynx这个可以网页访问的数据库管理工具&#xff0c;给大家分享一下。 1.介绍 SQLynx原名SQL Studio&…