图像上的抽奖号码如何?

问题描述 投票:0回答:1

此代码无法在图像上绘制数字。 .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# 绘图功能的新手。请帮我找到一些解决方法。

c# image
1个回答
0
投票

尝试改变

            image.Save(destinationImagePath); // save in new file
        }

        }
        image.Save(destinationImagePath); // save in new file
        

图形不会立即绘制到图像,它将绘制命令放在列表中,以便可以在单个块中有效地执行它们。这意味着您需要处理图形对象或调用

Flush(FlushIntention.Sync);
以确保数字已绘制到图像上。

© www.soinside.com 2019 - 2024. All rights reserved.