Используя C# WinForms, у меня есть обычный ярлык, который я заполняю закругленными углами. Проблема, с которой я сталкиваюсь, заключается в том, что получающиеся углы не округляются последовательно.
Для простоты понимания я создал 4 метки с закругленными углами в диапазоне от 1 до 5. Я добавил один контур границы для метки для удобства видимости, но даже без единого контура результаты одинаковы. Я также увеличил изображения на этикетках, чтобы мы могли видеть углы более четко.
Используя радиус 1, вы можете четко видеть, что верхние углы соответственно закруглены, но нижние границы остаются квадратными.
При использовании радиуса 2 и 3 соответственно получается аналогичный выход внизу.
Используя радиус 4 и 5 соответственно, вы можете четко видеть несоответствия на всех углах.
Обычно, если бы у меня была этикетка небольшого размера, это не было бы слишком большой проблемой, но пользователь должен иметь возможность масштабирования, и тогда он выглядит просто уродливо, когда радиус увеличивается, и несоответствия отчетливо видны.
Код, который я использую для создания закрашенного прямоугольника, предположительно очень базовый c, как, например, взято из Как рисовать закругленные Прямоугольник
public static GraphicsPath draw_rectangle(Rectangle bounds, int radius)
{
int diameter = radius * 2;
Size size = new Size(diameter, diameter);
Rectangle arc = new Rectangle(bounds.Location, size);
GraphicsPath path = new GraphicsPath();
if (radius == 0)
{
path.AddRectangle(bounds);
return path;
}
// top left arc
path.AddArc(arc, 180, 90);
// top right arc
arc.X = bounds.Right - diameter;
path.AddArc(arc, 270, 90);
// bottom right arc
arc.Y = bounds.Bottom - diameter;
path.AddArc(arc, 0, 90);
// bottom left arc
arc.X = bounds.Left;
path.AddArc(arc, 90, 90);
path.CloseFigure();
return path;
}
Я изучил и понимаю, что т код делает и как он работает, я получаю ракурсы и размах, но я ни в коем случае не опытный графический манипулятор, поэтому я не знаю, делаю ли я что-то не так или есть способ улучшить код для всех последовательность углов.
Ваша помощь и \ или объяснения приветствуются.