此代码无法在图像上绘制数字。 .Net框架4.8 它必须适用于所有尺寸的图像。
namespace NumerationImages
{
internal class Program
{
static void Main()
{
string sourceDirectoryPath = @"D:\test\1"; // Path with source images
string[] imageFiles = Directory.GetFiles(sourceDirectoryPath, "*.jpg"); // Get list of images .jpg
string destinationDirectoryPath = @"D:\test\2"; // Path to folder for save
try
{
// Create directory
Directory.CreateDirectory(destinationDirectoryPath);
Console.WriteLine("Folder is created");
}
catch (Exception ex)
{
Console.WriteLine("Error: " + ex.Message);
}
finally
{
}
Array.Sort(imageFiles, (a, b) =>
{
var aLastWriteTime = File.GetLastWriteTime(a);
var bLastWriteTime = File.GetLastWriteTime(b);
return aLastWriteTime.CompareTo(bLastWriteTime);
}); // Sort
int counter = 1;
foreach (string imagePath in imageFiles)
{
string destinationImagePath = Path.Combine(destinationDirectoryPath, Path.GetFileName(imagePath)); // Path
DrawNumberOnImage(imagePath, destinationImagePath, counter++);
Console.WriteLine("file: " + Path.GetFileName(imagePath));
}
Console.ReadLine();
}
static void DrawNumberOnImage(string sourceImagePath, string destinationImagePath, int number)
{
using (System.Drawing.Image image = System.Drawing.Image.FromFile(sourceImagePath))
using (Graphics graphics = Graphics.FromImage(image))
{
Font font = new Font("Arial", 12);
SolidBrush brush = new SolidBrush(Color.Black);
StringFormat format = new StringFormat();
format.Alignment = StringAlignment.Far;
format.LineAlignment = StringAlignment.Far;
// coordinates
float x = image.Width - 25;
float y = image.Height - 25;
graphics.DrawString(number.ToString(), font, brush, x, y, format);
image.Save(destinationImagePath); // save in new file
}
}
}
}
我有一个场景,应该根据图像大小自动分配数字。我是 C# 绘图功能的新手。请帮我找到一些解决方法。
尝试改变
image.Save(destinationImagePath); // save in new file
}
到
}
image.Save(destinationImagePath); // save in new file
图形不会立即绘制到图像,它将绘制命令放在列表中,以便可以在单个块中有效地执行它们。这意味着您需要处理图形对象或调用
Flush(FlushIntention.Sync);
以确保数字已绘制到图像上。