Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

C# WinForms - Плохое качество картинок в System.Drawing

Сергей Власенко Ученик (50), на голосовании 1 месяц назад
   public void Load_Images() // Метод загрузки изображений в программу   

{

listView1.Items.Clear();



ImageList imageList = new ImageList { ImageSize = new Size(100, 100) };



listView1.LargeImageList = imageList;



// Освобождаем память



GC.Collect();

GC.WaitForPendingFinalizers();



// --------------------------------------------------------------------



Address_To_The_Folder_With_Images = my_Documents.Link_To_My_Documents + @"\Electronic Arts\The Sims 4\Mods\Data\images";



Address_To_The_Folder_With_Images_Array = Directory.GetFiles(Address_To_The_Folder_With_Images);



for (int i = 0; i < Address_To_The_Folder_With_Images_Array.Length; i++)

{



try

{

using (FileStream stream = new FileStream(Address_To_The_Folder_With_Images_Array[i], FileMode.Open, FileAccess.Read))

{



Image image = Image.FromStream(stream);



imageList.Images.Add(image);



}



}



catch (Exception)



{

MessageBox.Show(MB3_LNG);



break;

}

}



for (int index = 0; index < imageList.Images.Count; index++)



{

ListViewItem item = new ListViewItem { ImageIndex = index };



listView1.Items.Add(item);

}



}
Всем привет. Возникла небольшая проблема.

Я загружаю пакет изображений в ImageList вывожу их на экран в listView1.

Все нормально работает кроме двух пунктов:

Плохой качество изображения (фото прилагаю) хотя в исходники качество хорошее.

Долгая загрузка изображений. Когда загружаю 30-50 изображений еще терпимо. Но только пытаюсь загрузить 500-1000 то программа очень долго обрабатывает естественно при этом висит.

Есть ли возможность поправить код, чтобы исправить данные проблемы.

Фото:
Голосование за лучший ответ
_анчоус__анчоусов Ученик (36) 2 месяца назад
В данном коде ошибка заключается в том, что в методе Load_Images() не предусмотрено закрытие потока FileStream после завершения чтения изображений из файлов. Необходимо добавить вызов метода stream.Close() или использовать конструкцию using для автоматического закрытия потока после завершения работы с ним.

Исправленный код будет выглядеть примерно так:

java
Copy code
try
{
using (FileStream stream = new FileStream(Address_To_The_Folder_With_Images_Array[i], FileMode.Open , FileAccess.Read ))
{
Image image = Image.FromStream(stream);
imageList.Images.Add(image);
}
}
catch (Exception)
{
MessageBox.Show(MB3_LNG);
break;
}
Сергей ВласенкоУченик (50) 2 месяца назад
Ты просто скопировал мой код. Я использую using.
V̲i̲s̲t̲a̲s̲t̲e̲r̲ Искусственный Интеллект (263972) 2 месяца назад
пробуй PictureBox
Сергей ВласенкоУченик (50) 2 месяца назад
Не подойдет. Я вывожу плитку изображений которыми потом управляю. Каждым изображением отдельно.
V̲i̲s̲t̲a̲s̲t̲e̲r̲ Искусственный Интеллект (263972) Сергей Власенко, тогда рендерить вручную
Похожие вопросы