Как правильно нарисовать объекты на Bitmap, чтобы можно было получить цвет пикселя?

Есть аквариум со скалами, в нём плавают рыбы. Рисую в picturebox. Вот прорисовка аквариума(в классе Aquarium):

public void Init(Graphics g) /*здесь в параметр я пытался ставить Bitmap bp, поэтому ниже использовано using*/
        {
            //using (Graphics g = Graphics.FromImage(bp))
            //{
            g.Clear(Color.Aquamarine);
            SolidBrush rocks = new SolidBrush(Color.Gray);
            g.FillPolygon(rocks, new Point[]
            {
            new Point(30, 400), new Point(50, 330), new Point(80, 400), //это скалы
            new Point(120, 300), new Point(180, 400), new Point(270, 300),
            new Point(300, 400), new Point(350, 350), new Point(400, 400),
            new Point(430, 370), new Point(500, 400)
            });
            //}
        }

А вот рыба(тоже в своём классе):

protected override void Draw(int x, int y, int size, string dir, Graphics g)
        {
            //using (Graphics g = Graphics.FromImage(bp))
            //{
                double halfbase = size * N / Math.Tan(Math.PI / 3);
                SolidBrush brushpike = new SolidBrush(Color.Red);
                Point[] points = new Point[3];
                points[0] = new Point(x, y);
                switch (dir)
                {
                    case "Вверх":
                        points[1] = new Point((int)(x - halfbase), y + size * N);
                        points[2] = new Point((int)(x + halfbase), y + size * N);
                        break;
                    case "Вниз":
                        points[1] = new Point((int)(x - halfbase), y - size * N);
                        points[2] = new Point((int)(x + halfbase), y - size * N);
                        break;
                    case "Влево":
                        points[1] = new Point(x + size * N, (int)(y - halfbase));
                        points[2] = new Point(x + size * N, (int)(y + halfbase));
                        break;
                    case "Вправо":
                        points[1] = new Point(x - size * N, (int)(y - halfbase));
                        points[2] = new Point(x - size * N, (int)(y + halfbase));
                        break;
                }
                g.FillPolygon(brushpike, points);
            //}
        }

Ну и вот как пишу в главном классе Form1, только я уже запутался совсем, перепробовал много вариантов:

public partial class Form1 : Form
    {
        Bitmap bp;
        Graphics g;
        public Form1()
        {
            InitializeComponent();
            pictureBox1.Image = new Bitmap(pictureBox1.Width, pictureBox1.Height);
            bp = new Bitmap(pictureBox1.Image);
            g = Graphics.FromImage(bp);
        }

        Aquarium Taquarium = new Aquarium();
        //Graphics g;
        private void button1_Click(object sender, EventArgs e) /*рисовать аквариум нужно в этом событии*/
        {
            button1.Visible = false;
            groupBox1.Visible = true;
            groupBox2.Visible = true;
            //bp = new Bitmap(pictureBox1.Image);
            Taquarium.Init(g);
        }

Вот рисование рыбы в другом событии(нажатие другой кнопки):

Pike TPike = new Pike();
     using (Graphics g = Graphics.FromImage(bp))
     {
     TPike.Init(Convert.ToInt32(textBox1.Text), //метод, задающий поля рыбы
     Convert.ToInt32(textBox2.Text),
     Convert.ToInt32(textBox3.Text),
     Convert.ToInt32(textBox4.Text),
     domainUpDown1.Text, g);
     }

Раньше всё работало хорошо, за исключением того, что не мог получить цвет пикселя по ходу движения рыбы, а когда начал работать с Bitmap, рыбы вовсе перестали появляться на картинке, только аквариум рисуется. Не знаю, что делать, на одном сайте вообще прочитал, что рисовать надо в событии Paint, но мне надо по нажатию кнопки. Что можете подсказать?


Ответы (0 шт):