.NET 4.x Получение цвета пикселя по координате в PictureBox - C#
Формулировка задачи:
Здраствуйте. Нужна помощь. Я в pictureBox нарисовал несколько отрезков:
Они между собой соеденены. Мне нужно что бы по этих отрезках бегал некий шарик, но я не могу получиться все точки (пиксели) этих отрезков.
Пытался получать координаты по формулах:
for (int i = 0; i < 4; i++) e.Graphics.DrawLine(purplePen, new Point(points[i, 0], points[i, 1]), new Point(points[i+1, 0], points[i+1, 1]));
Точка A(x,y) отрезок с концевыми точками B(x1,y1) и C(x2,y2)
Равенство расписывается по координатно так:
px1+(1-p)x2=x
py1+(1-p)y2=y
Из первого уравнения находим p, подставляем во второе: если получаем равенство и
0<=p<=1, то A на отрезке, иначе - нет.
Пришла идея попросту пройтись по пикселям в PictureBox. Если цвет пикселя соответствует заданому, то занести координаты в массив. Проблема в том, что я не подгружал изображение, а рисовал.
Такой способ:
if ((pictureBox1.Image as Bitmap).GetPixel(e.X, e.Y)) == Color.Purple)
{.....}
не работает. Выскакивает ошибка "Ссылка на объект не указывает на экземпляр объекта.".
Буду благодарен за помощь.
Еще пытался попросту найти растояние от некой точки к отрезку:
double up = ((y1-y2)*pageX+(x2-x1)*pageY+(x1*y2-x2*y1));
double down = Math.Sqrt( ((x2-x1)*(x2-x1)) + ((y2-y1)*(y2-y1)) );
double dl = Math.Abs(up/down);
pageX и pageY координатый некой точки.
Такой способ работает только при условии что отрезок паралелен оси Y или оси X. (( Решение задачи: «.NET 4.x Получение цвета пикселя по координате в PictureBox»
textual
Листинг программы
Bitmap bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height); Graphics g = Graphics.FromImage(bmp); for (int i = 0; i < 4; i++) g.DrawLine(purplePen, new Point(points[i, 0], points[i, 1]), new Point(points[i + 1, 0], points[i + 1, 1])); pictureBox1.Image = bmp; //дальше проверяешь каждую точку
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д