Передача битмапа в функцию как параметр

Есть метод получения цвета пикселя(на Picturebox):

private Color Look(Bitmap bp)
        {            
            if (y - 1 < 0 || y + 1 > bp.Height || x - 1 < 0 || x + 1 > bp.Width)
                return Color.Aquamarine;
            return bp.GetPixel(x, y);
        }

Есть определённый объект Bitmap:

public Form1()
        {
            InitializeComponent();
            map = new Bitmap(pictureBox1.Width, pictureBox1.Height);
            g = Graphics.FromImage(map);
        }

        Bitmap map;
        Graphics g;

Когда я передаю map в метод, он не работает. У меня вопрос: надо ли что-то делать в методе с параметром типа Bitmap, чтобы можно было вызывать метод GetPixel? Или дело не в этом?

Ред. К примеру, делаем метод Look публичным и пишем так:

if (radioButton1.Checked)
                {
                    g = Graphics.FromImage(map);
                    Karp TKarp = new Karp(Convert.ToInt32(textBox1.Text), //определяем объект
                        Convert.ToInt32(textBox2.Text),
                        Convert.ToInt32(textBox3.Text),
                        Convert.ToInt32(textBox4.Text),
                        domainUpDown1.Text, g);
                    Taquarium.AddKarp(TKarp);
                    pictureBox1.Image = map;
                    if (TKarp.Look(map).ToArgb() == Color.Aquamarine.ToArgb()) //считываем цвет пикселя, передавая map в метод
                    {
                        map.SetPixel(50, 50, Color.Red);
                    }
                }

Теперь то же самое, только вместо Look метод GetPixel:

if (radioButton1.Checked)
                {
                    g = Graphics.FromImage(map);
                    Karp TKarp = new Karp(Convert.ToInt32(textBox1.Text),
                        Convert.ToInt32(textBox2.Text),
                        Convert.ToInt32(textBox3.Text),
                        Convert.ToInt32(textBox4.Text),
                        domainUpDown1.Text, g);
                    Taquarium.AddKarp(TKarp);
                    pictureBox1.Image = map;
                    if (map.GetPixel(50, 50).ToArgb() == Color.Aquamarine.ToArgb())  
                    {
                        map.SetPixel(50, 50, Color.Red);
                    }
                }

Во втором случае работает, в первом-нет

Ред.

public virtual void Run(LinkedList<Karp> karps, Graphics g, Bitmap bp)
        {
            switch (dir)
                {
                case "Вверх":
                    y -= speed;
                    break;
                case "Вниз":
                    y += speed;
                    break;
                case "Влево":
                    x -= speed;
                    break;
                case "Вправо":
                    x += speed;
                    break;
                }
            if (Look(bp).ToArgb() == Color.Gray.ToArgb()) SureChangeDir();
            else if (x < 0 || y < 0 || x > Width || y > Length) SureChangeDir();
            else ChangeDir();
            Draw(g);
        }

Есть рыба, которая плавает. В зависимости от направления движения изменяется определённая координата. Сначала проверяется наличие скалы(нарисована серым цветом). Если рыба её достигла, она разворачивается. И только затем уже проверяется выход за границы picturebox(Width и Length). У меня, к примеру, скала есть в координатах (500,300), а размеры picturebox 600х400. ChangeDir просто рандомно меняет направление движения в любой момент времени(может не менять), отношения к проблеме он не имеет. Ну и затем рисуется рыба на новых координатах.

Ред.В метод передаётся чёрное изображение. Проверил так: создал переменную и присвоил ей значение метода Look, отладчик показал значение 00000000. А что надо сделать, чтобы метод работал с отрисованным изображением(метод находится в отдельном классе)? Пробовал передавать объект Image, но безрезультатно.


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