在listview中为图像绘制边框

在select事件之后的树视图中,我使用图像填充列表视图。
我想自定义这些图像的格式,并在每个图像周围放置一个黑色边框。

private void TreeView1_Select(object sender, EventArgs e) { if (folder != null && System.IO.Directory.Exists(folder)) { DirectoryInfo dir = new DirectoryInfo(@folder); foreach (FileInfo file in dir.GetFiles()) { try { imageList.Images.Add(Image.FromFile(file.FullName)); } catch { Console.WriteLine("This is not an image file"); } } for (int j = 0; j < imageList.Images.Count; j++) { this.ListView1.Items.Add("Item" + j); this.ListView1.Items[j].ImageIndex = j; } this.ListView1.View = View.LargeIcon; this.ListView1.LargeImageList = imageList; this.ListView1.DrawItem += new DrawListViewItemEventHandler(ListView1_DrawItem); } } private void ListView1_DrawItem(object sender, DrawListViewItemEventArgs e) { } 

我将在从文件加载图像后立即使用Graphics对象添加边框:

编辑 :修改代码,这对我有用…

  private void TreeView1_Select(object sender, EventArgs e) { if (folder != null && System.IO.Directory.Exists(folder)) { DirectoryInfo dir = new DirectoryInfo(@folder); foreach (FileInfo file in dir.GetFiles()) { Image img = new Bitmap(Image.FromFile(file.FullName)); using (Graphics g = Graphics.FromImage(img)){ g.DrawRectangle(Pens.Black, 0, 0, img.Width - 2, img.Height - 2); } imageList.Images.Add(img); 

注意 :图像复制是预期的; 如果我修改代码

  Image img = (Bitmap)Bitmap.FromFile("test.bmp"); 

正如评论中所建议的那样,我得到一个例外,说“无法从具有索引像素格式的图像创建图形对象”。