PictureBox的内存问题

Posted 乐在跑途

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PictureBox的内存问题相关的知识,希望对你有一定的参考价值。

1、PictureBox类

  表示用于显示图像的 Windows 图片框控件,通常使用 PictureBox 来显示位图、元文件、图标、JPEG、GIF 或 PNG 文件中的图形。

                                                          —MSDN

2、PictureBox控件的使用

  工具箱中的公共控件中托出PictureBox控件

  设置SizeMode属性—枚举类型

 PictureBox.Image获得图片的路径:三种方法

  1.绝对路径: 
  this.pictureBox2.Image=Image.FromFile("D:\\001.jpg"); 

  2.相对路径: 
  Application.StartupPath;  
  可以得到程序根目录  
  this.pictureBox2.Image=Image.FromFile(Application.StartupPath "\\1.gif"); 

  3.获得网络图片的路径 
  this.pictureBox2.Image= Image.FromStream(System.Net.WebRequest.Create(http://www.pxkt.com/logo.gif).GetResponse().GetResponseStream());
 
注:1、获得指定文件夹的所有文件的全路径

string [] path=Directory.GetFiles(@"......");

     2、如果不加 if (pictureBox1.Image != null)pictureBox1.Image.Dispose();会导致内存的溢出而报错。

示例:

   /// <summary>
        /// 程序进入的时候加载函数,给每个picturebox给一张照片
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Form1_Load(object sender, EventArgs e)
        {
            pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
            pictureBox2.SizeMode = PictureBoxSizeMode.StretchImage;
            pictureBox3.SizeMode = PictureBoxSizeMode.StretchImage;
            pictureBox1.Image = Image.FromFile(path[i]);
            pictureBox2.Image = Image.FromFile(@"C:\Users\Administrator\Desktop\4\_DSC2211.jpg");
            pictureBox3.Image = Image.FromFile(@"C:\Users\Administrator\Desktop\4\_DSC2211.jpg");
        }
        string[] path = Directory.GetFiles(@"C:\Users\Administrator\Desktop\4");
        int i = 0;
        Random r = new Random();
        /// <summary>
        /// 定时器控制每隔一秒换一张图片
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void timer1_Tick(object sender, EventArgs e)
        {
            i++;
            if (i == path.Length)
            {
                i = 0;
            }
         if (pictureBox1.Image != null)pictureBox1.Image.Dispose();
         if (pictureBox2.Image != null) pictureBox2.Image.Dispose();
         if (pictureBox3.Image != null) pictureBox3.Image.Dispose();
         pictureBox1.Image = Image.FromFile(path[r.Next(0,path.Length)]);
         pictureBox2.Image = Image.FromFile(path[r.Next(0,path.Length)]);
         pictureBox3.Image = Image.FromFile(path[r.Next(0,path.Length)]);
        }   

 值得注意的是如果不加

 if (pictureBox1.Image != null)pictureBox1.Image.Dispose();
会导致内存的溢出。

以上是关于PictureBox的内存问题的主要内容,如果未能解决你的问题,请参考以下文章

C#中,已知图片内存的首地址(System.IntPtr类),想通过pictureBox显示于窗口,但提示“参数无效”

图片数据的内存流读取,再写入

从文件中打开图像,然后释放锁定?

C 中的共享内存代码片段

C#picturebox覆盖保存GDI+ 中发生一般性错误

发现 .NET 内存泄漏?