Как писать тексты с определенным цветом фона на изображениях с помощью .Net System.Drawing - PullRequest
0 голосов
/ 22 октября 2018

Я хотел бы написать текст поверх изображения (какая-то автоматическая метка в стороне от фигур, нарисованных пользователями), однако эти метки иногда не читаются, поскольку они перекрываются с фоновыми изображениями.Я думал написать текст с белым цветом фона, но я не знаю, как это указать.Вот мой текущий код:

var font =  new Font("Time New Roman", 20, GraphicsUnit.Pixel);

using (var brush = new SolidBrush(Color.Black))
using (var graphics = Graphics.FromImage(image))
{
    var position = new Point(10,10);
    graphics.DrawString("Hello", font, brush, position);
}

Если единственный вариант - нарисовать прямоугольник под моим текстом, есть ли способ узнать размер написанного текста и как лучше всего их нарисовать?

1 Ответ

0 голосов
/ 23 октября 2018

Вы можете получить размер текста, используя

var stringSize = graphics.MeasureString(text, _font);

Попробуйте это.

class Program
    {
        static Font _font = new Font("Time New Roman", 20, GraphicsUnit.Pixel);
        static SolidBrush _backgroundBrush = new SolidBrush(Color.White);
        static SolidBrush _textBrush = new SolidBrush(Color.Black);

        static void Main(string[] args)
        {
            using (var image = Image.FromFile(@"<some image location>\image.bmp"))
            using(var graphics = Graphics.FromImage(image))
            {
                DrawLabel(graphics, new Point(10, 10), "test");
                image.Save(@"<some image location>\image.bmp");         
            }
        }

        static void DrawLabel(Graphics graphics, Point labelLocation, string text)
        {            
            var stringSize = graphics.MeasureString(text, _font);
            var rectangle = new Rectangle(labelLocation, Size.Round(stringSize));

            graphics.FillRectangle(_backgroundBrush, rectangle);
            graphics.DrawString(text, _font, _textBrush, labelLocation);
        }
    }
...