Image.FromFile 一旦使用后,对应的文件在一直调用其生成的Image对象被Disponse前都不会被解除锁定,这就造成了一个问题,就是在这个图形被解锁前无法对图像进行操作(比如删除,修改等操作).

在以前用的过程中曾用过下面三个方法解决问题.

第一种方法,在要进行文件操作前将Image对象销毁.

PictureBox picbox;

if(picbox.Image!=null)picbox.Image.Disponse();

第二种方法,就是在加载图像的时候用一种方法替代:

System.Drawing.Image img = System.Drawing.Image.FromFile(filepath);

System.Drawing.Image bmp = new System.Drawing.Bitmap(img.Width, img.Height,    System.Drawing.Imaging.PixelFormat.Format32bppArgb);

System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bmp);

g.DrawImage(img, 0, 0);

g.Flush();

g.Dispose();

img.Dispose();

//下面开始使用bmp作为显示的Image对象

System.Drawing.Image img = System.Drawing.Image.FromFile(filepath);

System.Drawing.Image bmp = new System.Drawing.Bitmap(img);

img.Dispose();

方法四:

fs = New System.IO.FileStream("C:\WINNT\Web\Wallpaper\Fly Away.jpg",
IO.FileMode.Open, IO.FileAccess.Read)
PictureBox1.Image = System.Drawing.Image.FromStream(fs)
fs.Close()

Image类的FromFile方法打开文件と后没有关闭,导致文件锁定,无法进行删除、移动等操作。

该而使用FromStream方法,代码如下:

//读取文件流
FileStream fileStream = new FileStream(iconPath, FileMode.Open, FileAccess.Read); int byteLength = (int)fileStream.Length;
byte[] fileBytes = new byte[byteLength];
fileStream.Read(fileBytes, , byteLength); //文件流关閉,文件解除锁定
fileStream.Close(); Pictrue.Image = Image.FromStream(new MemoryStream(fileBytes));
 

因为FromStream方法参数应用的流必须一直保持打开,故代码中有一个文件流向MemeoryStream流的转换,从而可以关闭文件流,保持MemoryStream流的打开状态。

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">

 
 
 
 

最新文章

  1. Alpha阶段项目总结
  2. delphi WebBrowser控件上网页验证码图片识别教程(一)
  3. eclipse设置汉化
  4. mysql group_concat 使用 (按分组组合字段)
  5. PowerDesigner
  6. TCP的封包与拆包
  7. (转)Java中equals和==的区别
  8. Eclipse rap 富客户端开发总结(3):rcp/rap目前界面上的一些差异
  9. REMOTE_ADDR,HTTP_CLIENT_IP,HTTP_X_FORWARDED_FOR获取客户端IP
  10. 各种Handler
  11. 调皮的程序员:Linux之父雕刻在Linux内核中的故事
  12. python与html5 websocket开发聊天对话窗
  13. leveldb 学习记录(一) skiplist
  14. 线程间操作无效: 从不是创建控件“button1”的线程访问它。
  15. ajax点击加载更多图片
  16. Spark特征(提取,转换,选择)extracting, transforming and selecting features
  17. Understanding Undefined Behavior
  18. Maven项目使用阿里云的Maven库
  19. ASP.NET Page执行顺序如:OnPreInit()、OnInit()
  20. WPF和Expression Blend开发实例:Loading动画

热门文章

  1. 正确的上网姿势:ubuntu18.04使用clash
  2. 「CF1142B」Lynyrd Skynyrd
  3. Navicat Premium 12安装及激活
  4. Linux操作系统服务器学习笔记一
  5. requests库GET
  6. Caffe2 载入预训练模型(Loading Pre-Trained Models)[7]
  7. Python组合类型笔记
  8. 怎么HTML表格中的所有字体居中?
  9. 一起探讨Go 语言为什么能成功?
  10. jsp 防止表单多次提交