Member 13384819 Ответов: 2

Как вставить изображение в список изображений C#


Всем Привет,

Я сделал одну галерею изображений, используя ImageList и listView.
Проблема в том, что я могу загрузить только папку или изображения один раз, когда нажимаю кнопку, не могу вставить новое изображение, пожалуйста, помогите мне вставить новое изображение для существующего списка изображений.

Или любое альтернативное решение также прекрасно для меня

Я использую visual studio 2010 и net 4.0

Что я уже пробовал:

try
    {
        listView1.Items.Clear();
        DirectoryInfo ds = new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory + "\\" + "temp" + "\\");
        string importpaths = AppDomain.CurrentDomain.BaseDirectory + "\\" + "temp" + "\\";
        FileInfo[] files = ds.GetFiles();
        ImageList imageList = new ImageList();
        imageList.ColorDepth = ColorDepth.Depth32Bit;
        listView1.View = View.LargeIcon;
        imageList.ImageSize = new Size(200, 200);
        foreach (FileInfo f in files)
        {
            string importpath = importpaths + f.Name;
            string filnames = System.IO.Path.GetFileNameWithoutExtension(importpaths + f.Name);

            System.Drawing.Image _img = System.Drawing.Image.FromFile(importpath);
            Bitmap pic = new Bitmap(300, 300);
            using (Graphics g = Graphics.FromImage(pic))
            {
                g.DrawImage(_img, new System.Drawing.Rectangle(0, 0, pic.Width, pic.Height)); //redraw smaller image
            }

            imageList.Images.Add(filnames, pic);
            
            _img.Dispose();
        }
        for (var i = 0; i < imageList.Images.Count; i++)
        {
            ListViewItem itm = new ListViewItem { ImageIndex = i, Text = imageList.Images.Keys[i] };
           
            listView1.LargeImageList = imageList;
            listView1.Items.Add(itm);             
        }
    }
    catch
    {
        MessageBox.Show("Please Check Temp Folder.");
    }
}

2 Ответов

Рейтинг:
2

BillWoodruff

Это написано быстро и непроверено, но я надеюсь, что оно покажет вам необходимые шаги для добавления изображения в существующий ListViewItem:

public void AddImage(ListViewItem lvitm, ImageList il, string filenm)
{
    Image newImg = Image.FromFile(filenm ?? throw new ArgumentNullException(nameof(filenm)));

    il.Images.Add(newImg);

    int ndx = il.Images.Count - 1;

    lvitm.ImageIndex = ndx;
}
Обратите внимание, что здесь предполагается:

1 Вы уже создали новый элемент ListViewItem ... который вы передаете в качестве параметра ...и добавил его в ListView.

2 переданный ImageList уже привязан к ListView


Member 13384819

Спасибо за то, что поделились своими знаниями, у меня есть одно событие кнопки, которое загружает изображения из системы в Listview с помощью imagelist(работает нормально). моя проблема заключается в том, что мне нужно вставить новое изображение для того же listviw во время выполнения..

BillWoodruff

Почему вы не можете использовать шаги, показанные выше, чтобы вставить новое изображение во время выполнения ?

Member 13384819

Вышеописанные шаги не работают..

BillWoodruff

Опишите подробно любые сообщения об ошибках. Что не работает ?

Member 13384819

когда я вставляю новое изображение , список изображений будет пустым в listview, который уже есть...

BillWoodruff

Это, вероятно, означает, что вы не передали ImageList из ListViewItem. Изучите это внимательно:

https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.listviewitem.imageindex?view=netcore-3.1

Рейтинг:
1

Sandeep Mewara

Высокий уровень, когда вы вставляете изображение во время выполнения (используя событие - скажем, просмотр изображения), вам нужно будет добавить новый элемент в список там.

Очень сырой уровень для вашего понимания, вам нужно сделать:

listView1.Items.Add(imageBrowsedObject, listView1.Items.Count+1)


Вы всегда можете пойти дальше и изменить/добавить imagelist, а затем обновить свой listview с его помощью. Попробуйте.


Member 13384819

Спасибо Сандип, я пробовал для нового события кнопки, я не могу сделать это из-за меньшего количества знаний об этом, пожалуйста, поделитесь некоторым кодом для вставки кнопки....

Member 13384819

строка importpaths = @" E:\Scanned Images\22082020\2.jpg";

Imagelist с imagelist с = новый imagelist с();
imagelist с.Colordepth Значение = Colordepth Значение.Depth32Bit;
listView1.View = просмотр.LargeIcon;
imageList.ImageSize = новый размер(200, 200);

строка importpath = importpaths ;
система строкой filnames =.ИО.Путь.GetFileNameWithoutExtension(importpaths );

imagelist с.Изображений.Добавить (System.Рисование.Изображение.FromFile(importpath));
мыши listview1.LargeImageList = imagelist с;

мыши listview1.Items.Add("тест", listView1.Предметы.Количество + 1);

Я попробовал выше код для кнопки, он будет вставлен, но он удалит существующие изображения из списка изображений