在屏幕上绘图

Drawing on the screen

本文关键字:绘图 屏幕      更新时间:2023-10-16

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

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

例如,有些应用程序会在屏幕上绘制HUD。他们是怎么做到的?

我需要一种方法让我的画永远在最前面。一般来说,我设法找到的所有方法都涉及在窗口上绘画(WinAPI、Direct2D、OpenGL)。有没有一种变通方法可以让它看起来像是在桌面上停留(包括所有打开的窗口)?

为了调试的目的,只需在屏幕上直接绘制即可。IIRC GetDC(0)将为您获取屏幕的设备上下文,但请查看整个函数家族。在Windows7中,它甚至不会破坏其他应用程序的显示,据报道,它在mac上同样"安全"。


例如,这在屏幕的左上角画了一个椭圆:

#include <windows.h>
int main()
{
    HDC const dc = GetDC( 0 );
    Ellipse( dc, 10, 10, 200, 200 );
}

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

您可以实现屏幕的设备上下文(DC),并像往常一样绘制该DC。输出将指向屏幕。为了实现这一点,如果我没有弄错的话,可以调用WinApi GetDC("DISPLAY")