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