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

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

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

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

 

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

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

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

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

posted @ 2015-03-12 15:53  雏菊之秋  阅读(254)  评论(0编辑  收藏  举报