首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

imagelist 加载性能有关问题

2013-02-02 
imagelist 加载性能问题首先因为图像加载到imagelist如果自动放缩的话图像会走形因此我先将图像和imagelis

imagelist 加载性能问题
首先因为图像加载到imagelist如果自动放缩的话图像会走形因此我先将图像和imagelist适配然后再加载到imaglist中 

现在问题是imagelist加载大图速度非常慢1MB以上的图像批量加载已经很龟速了 按道理来说我已经将图像缩小了然后才加载到imagelist中的 但是我加载缩略图到imagelist同样很慢 求大神帮忙指点迷津 下面放下我的代码

        public void Loadimage()
        {

            if (MessageBox.Show("载入盘符设定为" + comboBox1.Text, "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                #region 回收内存和释放控件列队
                images.Clear();
                listView1.Items.Clear();
                imageList1.Images.Clear();
                if (narTemp != null)
                {
                    Pimages.Clear();
                    narTemp.Dispose();
                    GC.Collect();
                }
                #endregion
                GetFile(@comboBox1.Text);
                imageList1.ImageSize = new Size(100, 120);//设置缩略图大小
                progressBar1.Value = 0;
                progressBar1.Maximum = images.Count;
                label1.Text = "已查找到" + images.Count.ToString() + "张图像";
                label1.Refresh();
                try
                {

                    foreach (string image in images)
                    {
                        progressBar1.Value = progressBar1.Value + 1;
                        FileStream files = new FileStream(image, FileMode.Open, FileAccess.Read, FileShare.Read);
                        byte[] imgByte = new byte[files.Length];


                        files.Read(imgByte, 0, imgByte.Length);
                        StreamReader r = new StreamReader(files, Encoding.ASCII);


                        if (imgByte[imgByte.Length - 1] != 0)
                        {
                            Bitmap Temp = new Bitmap(Image.FromFile(image).GetThumbnailImage(100, 120, tnCallBack, IntPtr.Zero));
                            files.Close();
                            narTemp = new Bitmap(imageList1.ImageSize.Width, imageList1.ImageSize.Height);
                            Graphics g = Graphics.FromImage(narTemp);

                            Picsize = FitSize(Temp.Width, Temp.Height, narTemp.Width, narTemp.Height);
                            Point tempxy;
                            tempxy = PointXY(Picsize, narTemp.Width, narTemp.Height);
                            g.DrawImage(Temp, 0, 0, (int)(Temp.Width * Picsize.fitsize), (int)(Temp.Height * Picsize.fitsize));

                            imageList1.Images.Add(narTemp);

                            listView1.View = View.LargeIcon;


                            listView1.Items.Add(Path.GetFileName(image));


                            listView1.LargeImageList = imageList1;
                            listView1.SmallImageList = imageList1;

                            for (int i = 0; i < listView1.Items.Count; i++)


                            {
                                listView1.Items[i].ImageIndex = i;

                            }
                            if (progressBar1.Value == images.Count)
                            {
                                label3.Text = "加载完毕!";
                                label3.Refresh();
                            }
                            else
                            {
                                label3.Text = "已经加载" + progressBar1.Value.ToString() + "张";
                                label3.Refresh();
                            }
                            g.Dispose();
                            Temp.Dispose();
                            GC.Collect();

                        }
                    }
                    listView1.View = View.LargeIcon;

                    foreach (string name in images) //创建图像列表
                    {
                        listView1.Items.Add(Path.GetFileName(name));


                    }

                    listView1.LargeImageList = imageList1;
                    listView1.SmallImageList = imageList1;

                    int n = 0;

                    for (int i = 0; i < listView1.Items.Count; i++)
                    {
                        listView1.Items[i].ImageIndex = i;
                        n++;
                    }

                    label1.Text = "加载图像共" + n.ToString() + "张";
                    label1.Refresh();

                }


                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);

                }
            }
        }


如何改进我的加载代码呢? 1M以上的图也让上传啊。限制大小~~~

热点排行