Используя C# WinForms, у меня есть обычный ярлык, который я заполняю закругленными углами. Проблема, с которой я сталкиваюсь, заключается в том, что получающиеся углы не округляются последовательно.
Для простоты понимания я создал 4 метки с закругленными углами в диапазоне от 1 до 5. Я добавил один контур границы для метки для удобства видимости, но даже без единого контура результаты одинаковы. Я также увеличил изображения на этикетках, чтобы мы могли видеть углы более четко.
Используя радиус 1, вы можете четко видеть, что верхние углы соответственно закруглены, но нижние границы остаются квадратными.
![Radius 1](https://i.stack.imgur.com/jOyvl.png)
При использовании радиуса 2 и 3 соответственно получается аналогичный выход внизу.
Используя радиус 4 и 5 соответственно, вы можете четко видеть несоответствия на всех углах.
![Radius 4](https://i.stack.imgur.com/iGeFp.png)
![Radius 5](https://i.stack.imgur.com/ksPcT.png)
Обычно, если бы у меня была этикетка небольшого размера, это не было бы слишком большой проблемой, но пользователь должен иметь возможность масштабирования, и тогда он выглядит просто уродливо, когда радиус увеличивается, и несоответствия отчетливо видны.
Код, который я использую для создания закрашенного прямоугольника, предположительно очень базовый 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;
}
Я изучил и понимаю, что т код делает и как он работает, я получаю ракурсы и размах, но я ни в коем случае не опытный графический манипулятор, поэтому я не знаю, делаю ли я что-то не так или есть способ улучшить код для всех последовательность углов.
Ваша помощь и \ или объяснения приветствуются.