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