我目前正在使用 OpenCV 开发一个应用程序来对屏幕上的元素进行视觉识别。
虽然不需要过程的可视化表示,但如果我能找到一种方法在屏幕上直接绘制圆圈、线条和可能的文本,而无需应用程序窗口,这对于调试目的将非常有用。
例如,某些应用程序会在屏幕上绘制 HUD。他们怎么做呢?
我需要一种方法让我的绘画始终处于最前面。一般来说,我设法找到的所有方法都涉及在窗口上绘画(WinAPI、Direct2D、OpenGL)。是否有一种解决方法可以让它看起来只是桌面上的一个停留(包括所有打开的窗口)?
出于调试的目的,只需在屏幕上绘制即可。IIRCGetDC(0)
将为您提供屏幕的设备上下文,但请查看整个功能系列。在 Windows 7 中,它甚至不会破坏其他应用程序的显示,据报道它在 mac 上同样“安全”。
例如,这会在屏幕的左上角绘制一个椭圆:
#include <windows.h>
int main()
{
HDC const dc = GetDC( 0 );
Ellipse( dc, 10, 10, 200, 200 );
}
如果图形位于窗口顶部并且该窗口被移动,则图形会消失。
您可以实现屏幕的设备上下文 (DC),并像往常一样在该 DC 中绘制。输出将被定向到屏幕。为此,请致电 WinApi GetDC("DISPLAY")
,如果我没记错的话。