Рисование кистью в 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);
    }
}

В противном случае вы рисуете растровое изображение на самом растровом изображении. Надеюсь это поможет.

Другие вопросы по тегам