我想在列表视图中显示Image[]
,但不知道如何。我在网上搜索,似乎共识似乎是ImageList
首选。它正常工作和显示,但它不符合我的需要。
如何将此代码转换为使用Image[]
代替ImageList
?
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
string dir = (string)e.Argument;
imageArr = Directory.GetFiles(dir, "*.jpeg", SearchOption.AllDirectories);
picList = new ImageList();
toolStripStatusLabel1.Text = "Generating thumbnails...";
for (int i = 0; i < imageArr.Length; i++)
{
Image img = Image.FromFile(imageArr[i]);
int width = img.Width / 10;
int height = img.Height / 10;
Image pic = img.GetThumbnailImage(width, height, null, new IntPtr());
picList.Images.Add(pic);
int procent = ((i + 1) * 100) / imageArr.Length;
bw.ReportProgress(procent);
}
bw.ReportProgress(0);
toolStripStatusLabel1.Text = "";
populateListView(picList);
}
private delegate void populateListViewDelegate(ImageList picList);
private void populateListView(ImageList picList)
{
if (InvokeRequired)
{
this.Invoke(new populateListViewDelegate(populateListView), picList);
return;
}
Size thumbSize = new Size(200, 141);
listView1.View = View.LargeIcon;
picList.ImageSize = thumbSize;
listView1.LargeImageList = picList;
toolStripStatusLabel1.Text = "Adding thumbnails to listview...";
for (int i = 0; i < picList.Images.Count; i++)
{
ListViewItem item = new ListViewItem();
item.ImageIndex = i;
listView1.Items.Add(item);
int procent = ((i + 1) * 100) / picList.Images.Count;
bw.ReportProgress(procent);
}
bw.ReportProgress(0);
toolStripStatusLabel1.Text = "";
}
显然int width
和int height
不起作用,因为ImageList对于所有图像具有相同的大小,如果我理解正确,但我当时不知道,这就是为什么我的懒惰self已经将代码留在那里。
基本上,我之前提到的“需求”是这些“缩略图”应该能够有不同的尺寸。
有关解决方法的任何帮助,关于我的问题的提示或者我应该采取不同的方法吗?
答案 0 :(得分:0)
您需要在添加图片之前设置ImageSize
。如果您更改ImageSize
,则会删除之前添加的所有图片。 See the Remarks here
您可能希望在添加任何图像之前将ColorDepth设置为32位。