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

C# плохое качество изображения

Сергей Власенко Ученик (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 + @"\image\";

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

stream.Close();

}


}

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);
}
}
Все вроде нечего но есть две проблемы.
  1. Низкая скорость загрузки больших объемов изображения
  2. Качество изображения портится. Изображение становится разноцветным.

Есть у кого варианты как исправить. В особенности изображения.

Вот такое изображение получается
Голосование за лучший ответ
[ ] [ ] Мастер (1178) 2 месяца назад
 GC.Collect(); 
За такое можно получить по башке! Сборщик мусора не трогай
Что касается вопроса
 public static class ImageController 
{
public static byte[] ImageData { get; set; }

public static BitmapImage ReturnImageFromDataBase(byte[] bytes)
{
byte[] buffer = bytes;
MemoryStream byteStream = new MemoryStream(buffer);
BitmapImage image = new BitmapImage();
image.BeginInit();
image.StreamSource = byteStream;
image.EndInit();
return image;
}

public static byte[] ReturnChoosedFile()
{
OpenFileDialog openFileDialog = new OpenFileDialog(); // создаем диалоговое окно
openFileDialog.ShowDialog(); // показываем
byte[] image_bytes = File.ReadAllBytes(openFileDialog.FileName); // получаем байты выбранного файла
return image_bytes;
}
}
Это класс по загрузке изображений из файловой системы, можно его улучшить, но он работает. Картинки насколько я помню не сжимает
Сергей ВласенкоУченик (50) 2 месяца назад
Конечно использования GC.Collect() не самое хорошее решение. Но выбора не было. Код уходил в Exception.
[ ] [ ] Мастер (1178) Сергей Власенко, Если уходит в Exception значит что-то делаешь не так. Очищать сборщик мусора вручную - это очень тяжеловесная операция. Рекомендую убрать эту часть кода.
Низкая скорость загрузки больших объемов изображения
Я думаю это из-за очистки сборщика
Сергей ВласенкоУченик (50) 2 месяца назад
А вопрос? Пространство имен "BitmapImage" ошибка по нему.....
[ ] [ ] Мастер (1178) Сергей Власенко, А что сделать надо в принципе?
Jurijus ZaksasИскусственный Интеллект (445726) 2 месяца назад
>За такое можно получить по башке!

С чего бы? Он же не в цикле. Ну, сказал разок сборщику все подобрать, подумаешь...
Jurijus Zaksas Искусственный Интеллект (445726) 2 месяца назад
Используй какую-нибудь стороннюю оптимизированную библиотеку для работы с изображениями, например freeimage.
Похожие вопросы