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);
}
}
}