Date: 17.06.2019 6:50:58
У вас идет рисование на PictureBox. Чтобы обрабатывать файлы без отображения, нужно как-то отделить обработку от GUI, т.е. реализовать рисование на самом объекте Image.
Вынесите добавление надписи в отдельный метод:
using System; using System.Collections.Generic; using System.Drawing; using System.Text; namespace WindowsFormsApp1 { public static class ImageEditor { public static void AddText(Image img, string text, Font font, Brush br, Point position) { Graphics g = Graphics.FromImage(img); using (g) { g.DrawString(text, font, br, position); } } } }
Тогда добавление ее на все файлы в каталоге можно реализовать так:
using System; using System.IO; using System.Drawing; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.Threading.Tasks; namespace WindowsFormsApp1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } void ProcessDirectory(string dir,string pattern,string text) { string[] files = Directory.GetFiles(dir,pattern); //обрабатываем файлы в каталоге for (int i = 0; i < files.Length; i++) { var bmp = new Bitmap(files[i]); //загрузка изображения Bitmap copy = new Bitmap(bmp); //создаем копию для обработки bmp.Dispose(); //освобождаем файл using (copy) { //добавляем надпись ImageEditor.AddText(copy, text, SystemFonts.CaptionFont, Brushes.Black, new Point(0, 0)); //сохраняем файл copy.Save(files[i]); } } string[] dirs = Directory.GetDirectories(dir); //обрабатываем подкаталоги for (int i = 0; i < dirs.Length; i++) { ProcessDirectory(dirs[i],pattern,text); } } private async void button1_Click(object sender, EventArgs e) { string text = textBox1.Text; await Task.Run(() => { ProcessDirectory("c:\\test\\images", "*.png",text); }); MessageBox.Show("Completed!"); } } }
Автор: VadimTagil