Рисование кистью в UserControl
Я пытаюсь рисовать кистью на элементе управления UserControl. Я могу рисовать линии, круги и прямоугольники. Я не совсем понимаю, почему я не могу рисовать кистью. Приведенный ниже код дает мне указатель на MouseDown, а затем он перемещается в положение, установленное в MouseUp. Во время MouseMove контент не рисуется. Я полагаю, что я не понимаю некоторые основные правила здесь.
Этот код работает для строк:
public override void Draw(Graphics graphics) {
graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
graphics.DrawLine(new Pen(this.Color, this.PenSize), startPoint, endPoint);
}
Этот код я пытаюсь адаптировать для кисти:
public override void Draw(Graphics graphics) {
if (this.bitmap != null) {
graphics = Graphics.FromImage(this.bitmap);
graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
graphics.DrawEllipse(new Pen(this.Color, this.PenSize), startPoint.X, startPoint.Y,
this.PenSize, this.PenSize);
graphics.DrawImage(this.bitmap, 0, 0);
}
}
Этот код перерисовывает список объектов:
private void UserControl_Paint(object sender, PaintEventArgs e) {
if (ObjectsList != null) {
ObjectsList.Draw(e.Graphics);
}
}
Как показывает код, я пытаюсь получить растровое изображение до и после точечного рисования линий. Должен ли я сделать это по-другому?
1 ответ
Я не очень понимаю ваш вопрос, но в вашем втором коде они кажутся ошибкой. Может быть, вы должны попробовать это:
public override void Draw(Graphics graphics)
{
if (this.bitmap != null)
{
Graphics g = Graphics.FromImage(this.bitmap);
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
g.DrawEllipse(new Pen(this.Color, this.PenSize), startPoint.X, startPoint.Y, this.PenSize, this.PenSize);
graphics.DrawImage(this.bitmap, 0, 0);
}
}
В противном случае вы рисуете растровое изображение на самом растровом изображении. Надеюсь это поможет.