4

我目前正在使用 OpenCV 开发一个应用程序来对屏幕上的元素进行视觉识别。

虽然不需要过程的可视化表示,但如果我能找到一种方法在屏幕上直接绘制圆圈、线条和可能的文本,而无需应用程序窗口,这对于调试目的将非常有用。

例如,某些应用程序会在屏幕上绘制 HUD。他们怎么做呢?

我需要一种方法让我的绘画始终处于最前面。一般来说,我设法找到的所有方法都涉及在窗口上绘画(WinAPI、Direct2D、OpenGL)。是否有一种解决方法可以让它看起来只是桌面上的一个停留(包括所有打开的窗口)?

4

2 回答 2

4

出于调试的目的,只需在屏幕上绘制即可。IIRCGetDC(0)将为您提供屏幕的设备上下文,但请查看整个功能系列。在 Windows 7 中,它甚至不会破坏其他应用程序的显示,据报道它在 mac 上同样“安全”。


例如,这会在屏幕的左上角绘制一个椭圆:

#include <windows.h>

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

如果图形位于窗口顶部并且该窗口被移动,则图形会消失。

于 2013-02-21T01:01:47.750 回答
0

您可以实现屏幕的设备上下文 (DC),并像往常一样在该 DC 中绘制。输出将被定向到屏幕。为此,请致电 WinApi GetDC("DISPLAY"),如果我没记错的话。

于 2013-02-21T01:04:19.823 回答