Почему результат Graphics.FillPath(path) отличается от Graphics.DrawPolygon(Pens.Black, path.PathPoints)

255
26 октября 2017, 06:35

Всем привет мне нужно преобразовть текст в коллекцию точек. Использую для этого GraphicsPath но не получается ожидаемый результат.

GraphicsPath myPath = new GraphicsPath();
// Set up all the string parameters.
string stringText = "Sample Text";
System.Drawing.FontFamily family = new System.Drawing.FontFamily("Arial");
int fontStyle = (int)System.Drawing.FontStyle.Italic;
int emSize = 26;
System.Drawing.Point origin = new System.Drawing.Point(100, 100);
StringFormat format = StringFormat.GenericTypographic;
// Add the string to the path.
myPath.AddString(stringText,
    family,
    fontStyle,
    emSize,
    origin,
    format);
//sample 1
Bitmap bitmap = new Bitmap(480, 480);
using (var gr = Graphics.FromImage(bitmap))
{
    gr.Clear(System.Drawing.Color.White);
    gr.FillPath(System.Drawing.Brushes.Red, myPath);
}
bitmap.Save(@"D:\test.bmp");
//sample 2
Bitmap bitmap1 = new Bitmap(480, 480);
using (var gr = Graphics.FromImage(bitmap1))
{
    gr.Clear(System.Drawing.Color.White);
    gr.DrawPolygon(Pens.Black, myPath.PathPoints);
}
bitmap1.Save(@"D:\test1.bmp");

на выходе в первом случае все как часы, а во втором результат немного другой.

Как можно получить правильную коллекцию точек используя PathPoints?

Под правильной я имею в виду без эффекта, как будто, не отрывая ручки написан текст.

Пример 1

Пример 2

Answer 1

DrawPolygon отрисовывает многогранник по точкам. Точки у вас неприрыны, от сюда и появляется эффект "как будто, не отрываю ручки написан текст".

Как решение - разделить каждую букву текста на отдельные массивы. Сделать это можно примерно так:

string stringText = "Sample Text";
System.Drawing.FontFamily family = new System.Drawing.FontFamily("Arial");
int fontStyle = (int)System.Drawing.FontStyle.Italic;
int emSize = 26;
System.Drawing.Point origin = new System.Drawing.Point(100, 100);
StringFormat format = StringFormat.GenericTypographic;
var myPaths = new List<GraphicsPath>();
foreach (var symbol in stringText)
{
    var gp = new GraphicsPath();
    gp.AddString(symbol.ToString(),
        family,
        fontStyle,
        emSize,
        origin,
        format);
    myPaths.Add(gp);
}
//sample 1
Bitmap bitmap = new Bitmap(480, 480);
foreach (var myPath in myPaths)
{
    using (var gr = Graphics.FromImage(bitmap))
    {
        gr.Clear(System.Drawing.Color.White);
        gr.FillPath(System.Drawing.Brushes.Red, myPath);
    }
}
bitmap.Save(@"D:\test.bmp");
//sample 2
Bitmap bitmap1 = new Bitmap(480, 480);
foreach (var myPath in myPaths)
{
    using (var gr = Graphics.FromImage(bitmap1))
    {
        gr.Clear(System.Drawing.Color.White);
        gr.DrawPolygon(Pens.Black, myPath.PathPoints);
    }
}
bitmap1.Save(@"D:\test1.bmp");
READ ALSO
В каком языке ошибка: Javascript или C# [требует правки]

В каком языке ошибка: Javascript или C# [требует правки]

Есть сайт для покупка автомобилейВот ссылка: http://www

183
C# NPOI ошибка Extern sheet is part of LinkTable при создании объекта HSSFWorkbook из FileStream

C# NPOI ошибка Extern sheet is part of LinkTable при создании объекта HSSFWorkbook из FileStream

Код ниже работает с ошибкой: "Extern sheet is part of LinkTable"Использую NPOI 2

421
Рисовалка + 3d модель на js

Рисовалка + 3d модель на js

Здравствуйте! Хотелось бы спросить советаЗадача такова: у нас есть 3d модель, допустим цилиндр, и развёртка этой модели

396
Пропала панель навигации в Postman (e)

Пропала панель навигации в Postman (e)

Помогите кто знает как восстановить панель навигации! Хоть и бонально вопрос звучит но я уже визде в нём протыкался немогу понять как восстановить...

305