Как нарисовать пронумерованные круги и сохранить их в файлах на C#

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

Метод MakeNumberBitmap, показанный в следующем коде, выполняет большую часть интересной работы рисования пронумерованных кругов.

// Сделайте растровое изображение, содержащее указанный текст.
private Bitmap MakeNumberBitmap(int width, Color bg_color,
    Color fg_color, bool draw_border, Font fg_font, string txt)
{
    // Размер растрового изображения.
    Bitmap bm = new Bitmap(width, width);
    using (Graphics gr = Graphics.FromImage(bm))
    {
        gr.SmoothingMode = SmoothingMode.AntiAlias;
        gr.TextRenderingHint = TextRenderingHint.AntiAlias;

        // Сделать фон прозрачным.
        gr.Clear(Color.Transparent);

        // Заполните фон.
        Rectangle rect = new Rectangle(2, 2, width - 4, width - 4);
        using (LinearGradientBrush bg_brush =
            new LinearGradientBrush(rect, Color.White,
            bg_color, LinearGradientMode.BackwardDiagonal))
        {
            gr.FillEllipse(bg_brush, rect);
        }

        // Обозначим фон.
        if (draw_border)
        {
            using (Pen bg_pen = new Pen(bg_color))
            {
                gr.DrawEllipse(bg_pen, rect);
            }
        }

        // Нарисуем образец текста.
        using (StringFormat string_format = new StringFormat())
        {
            string_format.Alignment = StringAlignment.Center;
            string_format.LineAlignment = StringAlignment.Center;
            using (Brush fg_brush = new SolidBrush(fg_color))
            {
                gr.DrawString(txt, fg_font, fg_brush,
                    rect, string_format);
            }
        }
    }

    return bm;
}

Сначала код создает растровое изображение нужного размера и делает объект Graphics для рисования на нем. Он устанавливает SmoothingMode объект для создания плавных линий и устанавливает TextRenderingHint, чтобы сделать гладкий текст. Затем он очищает растровое изображение прозрачным цветом.

Далее код заполняет круг с фоном, который оттеняет белый в верхнем правом углу желаемый фоновый цвет в левом нижнем углу. Если параметр draw_border true, код рисует контур вокруг круга.

Наконец, код рисует текст, который он должен отображать (число в этом примере), центрированное по растровому изображению, и возвращает растровое изображение.

В примере есть несколько обработчиков событий, которые заставляют его перерисовывать образец, если какой-либо из параметров чертежа изменяется, но самый интересный оставшийся фрагмент кода сохраняет серию изображений в файлах.

// Создаем файлы.
private void btnMakeFiles_Click(object sender, EventArgs e)
{
    // Создаем файлы.
    for (decimal i = nudMin.Value; i <= nudMax.Value; i++)
    {
        // Создаем файл.
        Bitmap bm = MakeNumberBitmap((int)nudWidth.Value,
            picBackground.BackColor, picForeground.BackColor,
            chkBorder.Checked, lblFontSample.Font,
            i.ToString());

        // Сохраним файл.
        bm.Save("Number" + i.ToString() + ".png", ImageFormat.Png);
    }

    MessageBox.Show("Done", "Done", MessageBoxButtons.OK,
        MessageBoxIcon.Information);
}

Источник: http://csharphelper.com/blog/2016/10/draw-numbered-circles-and-save-them-into-files-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector