• 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:UsersAdministratorDesktop4\_DSC2211.jpg");
                pictureBox3.Image = Image.FromFile(@"C:UsersAdministratorDesktop4\_DSC2211.jpg");
            }
            string[] path = Directory.GetFiles(@"C:UsersAdministratorDesktop4");
            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();
    会导致内存的溢出。
  • 相关阅读:
    Unity C# 反编译
    java finalize方法总结、GC执行finalize的过程
    Android性能调优篇之探索垃圾回收机制
    深入理解JVM(一)——JVM内存模型
    Android性能调优篇之探索JVM内存分配
    HashMap实现原理分析
    [干货]2017已来,最全面试总结——这些Android面试题你一定需要
    2017年最全的30个Android面试题,你将如何回答?
    Android2017进阶知识点、面试题及答案(精选版)
    Android2017最新面试题(3-5年经验个人面试经历)
  • 原文地址:https://www.cnblogs.com/apollo-shen/p/6876126.html
Copyright © 2020-2023  润新知