Передача битмапа в функцию как параметр
Есть метод получения цвета пикселя(на 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, но безрезультатно.