绘制边框图像列表视图 [英] Draw border for image in listview

查看:114
本文介绍了绘制边框图像列表视图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在选择事件发生后一个TreeView,我填充图像的列表视图。
我想自定义格式这些图像,并将黑色边框每个图像。

 私人无效TreeView1_Select(对象发件人,EventArgs的){
        如果(文件夹= NULL和放大器;!&安培; System.IO.Directory.Exists(文件夹)){

            DirectoryInfo的DIR =新的DirectoryInfo(@folder);
            的foreach(在dir.GetFiles的FileInfo文件()){
                尝试 {
                    imageList.Images.Add(Image.FromFile(file.FullName));
                } 抓住 {
                    Console.WriteLine(这不是一个图像文件);
                }
            }

            对于(INT J = 0; J< imageList.Images.Count; J ++){
                this.ListView1.Items.Add(项目+ J);
                this.ListView1.Items [J] .ImageIndex = j的;
            }

            this.ListView1.View = View.LargeIcon;
            this.ListView1.LargeImageList =图像列表;
            this.ListView1.DrawItem + =
                新DrawListViewItemEventHandler(ListView1_DrawItem);

        }
    }

    私人无效ListView1_DrawItem(对象发件人,DrawListViewItemEventArgs E)
    {

    }
 

解决方案

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

修改:修改了code,这对我的作品......

 私人无效TreeView1_Select(对象发件人,EventArgs的){
        如果(文件夹= NULL和放大器;!&安培; System.IO.Directory.Exists(文件夹)){

            DirectoryInfo的DIR =新的DirectoryInfo(@folder);
            的foreach(在dir.GetFiles的FileInfo文件()){

                图片IMG =新位图(Image.FromFile(file.FullName));
                使用(图形G = Graphics.FromImage(IMG)){
                    g.DrawRectangle(Pens.Black,0,0,img.Width  -  2,img.Height  -  2);
                }
                imageList.Images.Add(IMG);
 

注意:图像复制的目的;如果我修改code到

 图片IMG =(位图)Bitmap.FromFile(test.bmp);
 

作为评论的建议,我得到一个异常说图形对象不能从具有索引像素格式的图像创建。

On a treeview after the select event, I populate a listview with images.
I want to custom format these images and place a black color border around each image.

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

    }

解决方案

I would add a border using a Graphics object immediately after loading the images from file:

EDIT: modified the code, this works for me...

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

NOTE: the image copying is intended; if I modify the code to

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

as suggested in the comments, I get an exception saying "A Graphics object cannot be created from an image that has an indexed pixel format."

这篇关于绘制边框图像列表视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆