循环存取同一张图片导致的错误

本文详细阐述了在一个多线程环境中,如何避免截屏存储时出现的图片残缺问题。通过采用维护多个图片文件并定期清理的方法,实现了在保持图片完整性的前提下,实现流畅的屏幕变化展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  这两天被一个问题困住,目标是在一台电脑上连续不断(200毫秒为间隔)截屏并存入指定目录下的指定同一张图片pic.png中,另外一台电脑连续不断通过IP地址加图片路径读取这张图片pic.png。

  问题出现了,当我总是在存同一张图片的时候,服务器这边读取到的图片会有残缺,有时候甚至只能解析到上面一小部分。

  很快我意识到这是因为存储图片的间隔太小,于是改为间隔是 500毫秒 ,也有同样的问题。但考虑到要在读取图片的那一端看到流畅的屏幕变化,所以时间间隔又不适宜设置得太大。

 

  我在园子里发了相关博问,大牛告诉我可以试试加锁,然而没什么用。最终和同事讨论了一下,找到一个好的解决方案。

  首先在截屏的这一台电脑上维护5张张图片,截屏一次存一张,文件名称同时存入一个 txt 文件中,当存储的图片超过5张的时候,删除 除了最近5张图片以外的所有图片,同时删除 txt 文件中被删图片的名称记录。  在读图的那台电脑上先读取 txt 文件,解析到最新一张图片的名称,根据这个名称读取相应的图片并且显示。

  这个问题能够解决的根本原因在于,多线程情况下,Bitmap存储同一张图片的时候,会出现 前一张还没有存储完成 后一次存储已经开始  这样的情况,即使添加共享锁也不能解决问题。而如果存成不同的文件,同样是多线程存储,那么每个文件都能完整地存储下来。

  特此记录该问题的比较麻烦的解决方法,如果发现更好的解决方案,会更改本文章的内容。

转载于:https://www.cnblogs.com/theblueberry/p/4332667.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值