【问题标题】:Draw border for image in listview在列表视图中为图像绘制边框
【发布时间】:2010-12-04 04:38:32
【问题描述】:

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

   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) 
    {

    }

【问题讨论】:

  • 嘿,rockrule,你能用编辑器中的代码按钮格式化你的代码吗?
  • @rockrule,提供代码没问题,但您能否也提出一个问题?你到底想做什么?
  • 在选择事件后的树视图上,我用图像填充列表视图。我想在列表视图中自定义格式这些图像并在每个图像周围放置黑色边框。请帮助
  • 如果我的代码解决了你的问题,那么请将其标记为已接受的答案:)

标签: c# .net image listview drawing


【解决方案1】:

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

EDIT:修改了代码,这对我有用...

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

正如 cmets 中所建议的,我收到一个异常提示“无法从具有索引像素格式的图像创建图形对象。”

【讨论】:

  • hi orsogufu,谢谢,给定的代码对图像没有任何影响。我必须设置属性吗?请帮助
  • 我将从Image img = ... 开始的行更改为Bitmap img = (Bitmap)Bitmap.FromFile(file.FullName);。您的版本会加载文件,然后对其进行位图复制。
  • @MusiGenesis:感谢您的评论,但我是故意复制的(请参阅编辑后的答案)。如果您知道如何在不复制的情况下避免错误,请告诉我!
  • 谢谢 orsogufo,orsogufo 建议的代码有效,但我只能在图像的 2 侧看到边框。我错过了什么吗?
  • @rockrule: 调整矩形,检查我的代码。现在您应该看到所有边框了。
猜你喜欢
  • 2021-03-12
  • 2016-06-07
  • 2018-11-26
  • 1970-01-01
  • 2014-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多