Нарисуйте границу для изображения в виде списка - PullRequest
1 голос
/ 06 октября 2009

В древовидной структуре после события 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) 
    {

    }

1 Ответ

1 голос
/ 06 октября 2009

Я бы добавил границу, используя объект 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");

Как предлагается в комментариях, я получаю исключение, говорящее: «Графический объект не может быть создан из изображения, имеющего индексированный формат пикселей».

...