Я работаю над проектом, в котором пользователь может рисовать фигуры и изменять их (размер, обводка и т. д.). Затем я столкнулся с проблемой, я попытался настроить толщину обводки внутри, поэтому я сделал этот код:
public void DrawCircle(Color c, int stroke, float w, float h, Graphics g)
{
this.width = w;
this.height = h;
this.strokeThickness = stroke;
this.type = ShapeType.circle;
w -= strokeThickness;
h -= strokeThickness;
PointF points = new PointF();
//Centering the Shape
points.X = (float)((center.X - (w/ 2)));
points.Y = (float)((center.Y - (h / 2)));
//Aliasing for smooth graphics when drawing and resizing
g.InterpolationMode = InterpolationMode.High;
//Drawing
RectangleF rect = new RectangleF(points.X, points.Y, w, h);
g.DrawEllipse(new Pen(c, stroke), rect);
}
Но всякий раз, когда сохраняю (сохраняю в коллекцию для перекраски). Это происходит примерно так:
Точка отображается точно в центре. Он исчезает после picturebox.Refresh () / Invalidate (); но я не хочу этого в первую очередь. Как вы думаете, что здесь происходит?
Не стесняйтесь спрашивать части кода, которые вы хотите знать. Я просто представил чертежную часть.
общедоступный центр PointF = новый PointF (250f, 250f); Потому что мой ящик с картинками 500 500
Поместите Console.Debug (rect) после DrawEllipse и запустите вашу программу в режиме отладки. Убедитесь, что не существует вызова с нулевой шириной и высотой, вызывающим появление центральной точки.
{X = 46,90552, Y = 46,90552, Ширина = 406,189, Высота = 406,189} {X = 251, Y = 251, Ширина = -2, Высота = -2} @PhilWright
@PhilWright ширина и высота, кажется, снова рисуются с отрицательными значениями
Вот ваша проблема, вам нужно выяснить, почему вы получаете два звонка и почему второй для размера -2.
Кстати, InterpolationMode здесь не выполняет сглаживания. В основном он используется для изменения размера растровых изображений. Вам нужно использовать Graphics.SmoothingMode. В этом случае следует установить SmoothingMode.AntiAlias. Кроме того, поскольку Pen, используемый с настройками по умолчанию, рисует половину внутри и половину за пределами границ прямоугольника, вы можете использовать Прямоугольник. с отрицательными значениями, чтобы уменьшить его размер на половину размера Pen.





Что такое
centerв вашем коде?