Недостаточно памяти при работе с большим количеством изображений - C#
Формулировка задачи:
Добрый вечер уважаемые форумчани. Помогите пожалуйста понять причину в коде. Сделал программу для ввода текста в изображение при массиве 255 фото происходит сбой Ошибка: "Недостаточно памяти", то она есть, то ее нет, у друга на компе половину обработает половину нет. В чем проблема. Вот код посмотрите пожалуйста, может что я не так сделал.
void DrawTextOnImage(string image, string text, Font font, Brush brush) { Bitmap bmp = new Bitmap(image);// Вот здесь пишет что ошибка, если в режиме отладки то все нормально. Graphics g = Graphics.FromImage(bmp); RectangleF imageRect = new RectangleF(PointF.Empty, new SizeF((float)bmp.Size.Width, (float)bmp.Size.Height)); g.DrawString(Mytext, font, brush, imageRect); bmp.Save(text, System.Drawing.Imaging.ImageFormat.Jpeg); try { g.Dispose(); } catch (Exception ex) { MessageBox.Show(ex.Message); } } // Метод обработки фото List<string> nameList = new List<string>(); private void Form1_Load(object sender, EventArgs e) { nameList.AddRange(File.ReadAllLines(Application.StartupPath + "\\Name.txt")); string Mytext = "{" + count + "}" + nameList[int.Parse(ran)];// Возвращаем имя из файла по индексу count = int.Parse(ran); ran = Convert.ToString(count + 1); Maindr = new DirectoryInfo(path);//Путь к каталогу ChildDr = new DirectoryInfo(newPath);// Новый путь к каталогу try { ChildDr.Delete(true);// Удаляем каталог со всеми потрохами } catch { } foreach (DirectoryInfo getFolders in Maindr.GetDirectories()) { if (File.Exists(ChildDr.FullName) != true)//Определяем если есть такие папки, по пути? { ChildDr.CreateSubdirectory(getFolders.Name);//Создаем папки по пути foreach (FileInfo files in getFolders.GetFiles()) { Beige = new SolidBrush(Color.Beige); Font font = new Font(FontFamily.GenericSansSerif, 0.1F, FontStyle.Regular); DrawTextOnImage(files.FullName, newPath + "\\" + getFolders.Name + "\\" + files.Name, font, Beige);// Обрабатываем фото и сохраняем в новый путь } } } foreach (FileInfo files1 in Maindr.GetFiles()) { Beige = new SolidBrush(Color.Beige); Font font = new Font(FontFamily.GenericSansSerif, 0.1F, FontStyle.Regular); DrawTextOnImage(files1.FullName, newPath + "\\" + files1.Name, font, Beige); }
Решение задачи: «Недостаточно памяти при работе с большим количеством изображений»
textual
Листинг программы
void DrawTextOnImage(string image, string text, Font font, Brush brush) { using (Bitmap bmp = new Bitmap(image)){ using (Graphics g = Graphics.FromImage(bmp)){ RectangleF imageRect = new RectangleF(PointF.Empty, new SizeF((float)bmp.Size.Width, (float)bmp.Size.Height)); g.DrawString(Mytext, font, brush, imageRect); bmp.Save(text, System.Drawing.Imaging.ImageFormat.Jpeg); try{ g.Dispose(); } catch (Exception ex){ MessageBox.Show(ex.Message); } } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д