zoukankan      html  css  js  c++  java
  • C# 之 后台加载图片Image

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

      解决方法常用如下:

    [1]在要进行文件操作前将Image对象销毁.

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

    [2]在加载图像的时候用一种方法替代:

    Image img = Image.FromFile(filepath);
    Image bmp = new Bitmap(img.Width, img.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
    Graphics g = Graphics.FromImage(bmp);
    g.DrawImage(img, 0, 0);
    g.Flush();
    g.Dispose();
    img.Dispose();
    
    //下面开始使用bmp作为显示的Image对象
    Image img = Image.FromFile(filepath);
    Image bmp = new Bitmap(img);
    img.Dispose();

    [3]在加载图像的时候用一种方法替代:

    System.IO.FileStream fs = New System.IO.FileStream("C:WINNTWebWallpaperFly Away.jpg",
    System.IO.FileMode.Open, System.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流的打开状态。

  • 相关阅读:
    记录一次性能优化(转)
    Java线程池使用说明
    Spring AOP: Spring之面向方面编程
    hibernate 联合主键生成机制(组合主键XML配置方式)
    Hibernate配置文件hbm主键的generator可选项
    关于spring-mvc的InitBinder注解的参数
    Quartzs -- Quartz.properties 配置
    开源调度框架Quartz最佳实践
    Windows系统上如何使用SSH
    导入DEM数据到ArcGIS
  • 原文地址:https://www.cnblogs.com/xinaixia/p/4976721.html
Copyright © 2011-2022 走看看