Написать текст на изображении в C # - PullRequest
24 голосов
/ 26 июля 2011

У меня следующая проблема. Я хочу сделать графику в растровом изображении, например, в виде связи

я могу написать текст в изображении
но я напишу больше текста в различных позициях

Bitmap a = new Bitmap(@"path\picture.bmp");

using(Graphics g = Graphics.FromImage(a))
{
 g.DrawString(....); // requires font, brush etc
}

как мне написать текст, сохранить его и написать другой текст в сохраненном изображении

Ответы [ 4 ]

65 голосов
/ 26 июля 2011

Чтобы нарисовать несколько строк, вызовите graphics.DrawString несколько раз. Вы можете указать местоположение нарисованной строки. В этом примере мы нарисуем две строки «Hello», «Word» («Hello» синего цвета, «Word» перед красным):

string firstText = "Hello";
string secondText = "World";

PointF firstLocation = new PointF(10f, 10f);
PointF secondLocation = new PointF(10f, 50f);

string imageFilePath = @"path\picture.bmp"
Bitmap bitmap = (Bitmap)Image.FromFile(imageFilePath);//load the image file

using(Graphics graphics = Graphics.FromImage(bitmap))
{
    using (Font arialFont =  new Font("Arial", 10))
    {
        graphics.DrawString(firstText, arialFont, Brushes.Blue, firstLocation);
        graphics.DrawString(secondText, arialFont, Brushes.Red, secondLocation);
    }
}

bitmap.Save(imageFilePath);//save the image file

Редактировать: «Я добавляю код загрузки и сохранения».

Вы можете в любое время открыть файл растрового изображения Image.FromFile и нарисовать на нем новый текст, используя приведенный выше код. а затем сохраните файл изображения bitmap.Save

3 голосов
/ 26 июля 2011

Вот пример вызова Graphics.DrawString, взятого из здесь :

g.DrawString("My\nText", new Font("Tahoma", 40), Brushes.White, new PointF(0, 0));

Очевидно, он основан на установке шрифта с именем Tahoma.

Класс Brushes имеет много встроенных кистей.

См. Также страницу MSDN для Graphics.DrawString.

1 голос
/ 26 сентября 2017

Чтобы сохранить изменения в том же файле, мне пришлось объединить Джалал Саид и NSGaga на этот вопрос.Вам необходимо создать новый объект Bitmap на основе старого, утилизировать старый объект Bitmap , а затем сохранить его, используя новый объект:

string firstText = "Hello";
string secondText = "World";

PointF firstLocation = new PointF(10f, 10f);
PointF secondLocation = new PointF(10f, 50f);

string imageFilePath = @"path\picture.bmp";

Bitmap newBitmap;
using (var bitmap = (Bitmap)Image.FromFile(imageFilePath))//load the image file
{
    using(Graphics graphics = Graphics.FromImage(bitmap))
    {
        using (Font arialFont =  new Font("Arial", 10))
        {
            graphics.DrawString(firstText, arialFont, Brushes.Blue, firstLocation);
            graphics.DrawString(secondText, arialFont, Brushes.Red, secondLocation);
        }
    }
    newBitmap = new Bitmap(bitmap);
}

newBitmap.Save(imageFilePath);//save the image file
newBitmap.Dispose();
0 голосов
/ 06 ноября 2015

Если у кого-то возникли проблемы с этими строками кода:

using(Graphics graphics = Graphics.FromImage(bitmap))

Решение:

Bitmap bitmap = (Bitmap)**System.Drawing.Image.FromFile**(@"C:\Documents and Settings\", true);
...