#c# #winforms #location #screen #coordinates
#c# #winforms #Расположение #экран #координаты
Вопрос:
У меня следующая проблема: я пишу приложение WinForms на C # и хочу получить экранные координаты части изображения, в данном случае верхней части этой руки (отмеченной красной точкой).
Кто-нибудь знает, как я могу сделать это программно?
(«Координаты точек» = Координаты этой точки)
РЕДАКТИРОВАТЬ: извините, что сбил вас с толку, картинка выше должна демонстрировать только мою проблему. Фактическая цель моей программы — переместить управляемую мышью руку в игре в дартс в правильное положение, но это невозможно, только установив MouseLocation в фиксированную точку, потому что каждый ход стрелка получает другое расстояние x: y до MouseLocation. Итак, мне нужно найти местоположение стрелки (-arrow).
Я надеюсь, что теперь все знают, в чем моя проблема.
Комментарии:
1. Как с помощью кода угадать, что кто-то нарисовал руку на рабочем столе?
2. Какого рода информацию мы можем предположить? Я имею в виду, знаете ли вы относительные координаты точки на картинке? Или мы должны сканировать все изображение рабочего стола пиксель за пикселем в поисках определенного местоположения? Как рисуется картинка на рабочем столе? Является ли это частью прозрачной формы, или вы рисуете ее непосредственно на DC рабочего стола?
3. Это довольно близко к распознаванию шаблона… и красные точки могут быть даже на фоновом изображении
4. @Shekhar_Pro, действительно звучит как задание для OpenCV.
Ответ №1:
В каком-то случае формы используйте:
this.PointToScreen(new System.Drawing.Point(250, 300));
Замените точку точкой (относительно формы), которая вас интересует.
Комментарии:
1. У меня это не сработало, когда окно было вне экрана. смотрите решение ниже.
Ответ №2:
Управление.PointToScreen не будет работать корректно, если ваше окно свернуто, скрыто или находится за пределами экрана. Вам придется перейти вниз, чтобы взаимодействовать с Win32 API:
итак, начните с импорта API:
[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern bool GetCursorPos(out Point lpPoint);
и используйте это:
Point pts;
GetCursorPos(out pts);
MessageBox.Show(this, pts.ToString());