在屏幕上绘图

4
我正在使用OpenCV开发一个应用程序,用于屏幕元素的视觉识别。虽然不需要过多的视觉表现,但如果我能找到一种方法在屏幕上直接绘制圆形、线条甚至文本,而不需要一个应用窗口,那将非常有助于调试。
有些应用程序会在屏幕上绘制HUDs。他们是如何实现的呢?
我需要一种让我的绘图始终处于前台的方法。通常,我找到的所有方法都涉及在窗口上绘制(WinAPI、Direct2D、OpenGL)。是否有一种变通方法可以使它看起来像是桌面上的覆盖层(包括所有打开的窗口)?

1
不行,但窗口可以置于其他窗口之上并且部分透明,同时大小可以设置为屏幕大小。 - Öö Tiib
为什么这个问题被投票否决了?真是的,这是一个合理的问题! - ash
2个回答

4

为了调试,只需在屏幕上直接绘制即可。如果我没记错的话,GetDC(0) 将为您获取一个用于屏幕的设备上下文,但请查看整个函数族。在 Windows 7 上,它甚至不会破坏其他应用程序的显示,并且据称在 Mac 上同样“安全”。


例如,以下代码会在屏幕左上角绘制一个椭圆:

#include <windows.h>

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

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

这听起来正是我所需要的。移动后图形是否会重新出现? - awfm9
我没有看到图形重新出现。我认为在Windows 7中发生的事情是,新式的DWM(桌面窗口管理器)拦截了输出,以便它不会真正直接绘制在屏幕上,而只是在属于您的应用程序的位图中绘制。但我不确定。无论如何,仅用于呈现东西还是可以的! :-) - Cheers and hth. - Alf
没关系,它可以工作!考虑到这是为了调试,我认为限制不会成为问题。谢谢! - awfm9

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接