• C# 加载图片image --(C#)Image.FromFile 方法会锁住文件的原因及可能的解决方法


    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:WINNTWebWallpaperFly 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, 0, byteLength);
    
    //文件流关閉,文件解除锁定
    fileStream.Close();
    
    Pictrue.Image = Image.FromStream(new MemoryStream(fileBytes));
    
    因为FromStream方法参数应用的流必须一直保持打开,故代码中有一个文件流向MemeoryStream流的转换,从而可以关闭文件流,保持MemoryStream流的打开状态。
  • 相关阅读:
    进程、线程和协程的图解
    Python多线程的原理与实现
    Python多进程原理与实现
    python面试题-1
    数据库事务隔离级别--读未提交,读已提交,重复读,序列化
    java--浅谈线程(二、线程的方法和状态)
    java--浅谈线程(一简单介绍)
    类加载机制--浅谈
    JSP/Servlet Web 学习笔记 DayThree
    JSP/Servlet Web 学习笔记 DayThree —— 实现一个登陆小界面
  • 原文地址:https://www.cnblogs.com/vaevvaev/p/6924903.html
Copyright © 2020-2023  润新知