C # - Как рисовать фигуры на растровое изображение из списка? - PullRequest
0 голосов
/ 05 ноября 2018

Я работаю над программой, подобной рисованию. Существует подкласс usercontrol "SketchControl", который имеет Sketch. Эскиз в свою очередь имеет растровое изображение.

Раньше всякий раз, когда фигура рисовалась в пользовательском контроле, фигура непосредственно рисовалась на растровом изображении. Мы должны изменить программу так, чтобы все формы добавлялись в список «рисования», чтобы мы могли сохранить чертеж. Теперь мы должны нарисовать фигуры из этого списка, но я не могу этого сделать. Фигуры имеют метод рисования «рисовать».

Я попытался добавить этот или аналогичный код в метод рисования SketchControl и метод рисования Sketch:

using (Graphics g = Graphics.FromImage(myBitmap))
            {
                for (int i = 0; i < drawing.Count; i++)
                {
                    drawing[i].draw(g);
                }
            }

который не работал.

«рисование» для конкретной фигуры может выглядеть как

public override void draw(Graphics gr)
         {  gr.DrawEllipse(pen, p1, p2); }

Я прошу прощения, если это глупый вопрос, но я был бы очень признателен за любую помощь. Как заставить формы поворачивать op на растровом изображении, когда я рисую их из списка вместо непосредственно на растровом изображении? Где должен быть мой код?

1 Ответ

0 голосов
/ 05 ноября 2018

Можете ли вы проверить сохранение графика или, возможно, фактическую реализацию метода отрисовки? Вот функциональный рисунок с выводом картинки

enter image description here

var drawing = new List<IDrawable>
{
    new AquaCircle(),
    new RedCircle(),
};
var imageFile = new Bitmap(200, 200);
using (var g = Graphics.FromImage(imageFile))
{
    for (var i = 0; i < drawing.Count; i++)
    {
        drawing[i].Draw(g);
    }
}

imageFile.Save("test.jpg");

формы могут улучшить интерфейс

public interface IDrawable
{
    void Draw(Graphics g);
}

public class AquaCircle : IDrawable
{
    void IDrawable.Draw(Graphics g)
    {
        g.DrawEllipse(new Pen(Color.Aqua, 1), 1, 1, 100, 100);
    }
}

public class RedCircle : IDrawable
{
    void IDrawable.Draw(Graphics g)
    {
        g.DrawEllipse(new Pen(Color.Red, 1), 25, 25, 100, 100);
    }
}
...