读书人

imagelist 加载性能有关问题

发布时间: 2013-02-02 12:27:16 作者: rapoo

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以上的图也让上传啊。限制大小~~~

读书人网 >C#

热点推荐