2013-02-21 2 views
3

В настоящее время я разрабатываю приложение с OpenCV для визуального распознавания элементов на экране.Рисунок на экране

Хотя визуальное представление процесса не требуется, оно было бы очень полезно для целей отладки, если бы я мог найти способ нарисовать круги, линии и, возможно, текст непосредственно на экране, без окна приложения.

Есть определенные приложения, которые, например, рисуют HUD по экрану. Как они это делают?

Мне нужно, чтобы мой рисунок всегда был спереди. В общем, все способы, которые мне удалось найти, включают рисование в окне (WinAPI, Direct2D, OpenGL). Есть ли обходной путь, чтобы он выглядел так, как будто это просто наложение на рабочий стол (включая все открытые окна)?

+1

Нет, но окно может быть размером с экран поверх других и частично прозрачным. –

+0

Почему этот вопрос проголосовали? wtf, это законный вопрос! – ash

ответ

4

с целью отладки, просто буквально рисуйте на экране. IIRC GetDC(0) предоставит вам контекст устройства для экрана, но ознакомьтесь с этим целым набором функций. в Windows 7 он даже не загрязняет дисплеи других приложений, и, как сообщается, он также «безопасен» для Mac.


, например, это рисует эллипс в верхнем левом углу экрана:

#include <windows.h> 

int main() 
{ 
    HDC const dc = GetDC(0); 
    Ellipse(dc, 10, 10, 200, 200); 
} 

графический исчезает, если он находится на верхней части окна, а окно перемещается.

+0

Это звучит точно так, как мне нужно. Появляется ли изображение после перемещения? – awishformore

+0

Я не видел, как снова появляется графика. Я думаю, что в Windows 7 происходит то, что новомодный DWM (Desktop Window Manager) перехватывает вывод так, что он не * действительно * рисует прямо на экране, а просто в растровом изображении, которое принадлежит вашему приложению. но я не уверен. во всяком случае, работает нормально, просто представляя вещи! :-) –

+0

Ничего, это работает! Видя, как это делается для отладки, я думаю, что ограничения не будут проблемой. Благодаря! – awishformore

0

Вы можете достичь контекста устройства (DC) экрана и нарисовать его как обычно. Выход будет направлен на экран. Для этого позвоните WinApi GetDC("DISPLAY"), если я не ошибаюсь.

Смежные вопросы