Недостаточно памяти при работе с большим количеством изображений - 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);
                }
            }
        }
    }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.125 из 5
Похожие ответы