我在Windows XP上使用Visual Studio 2008并学习C ++。
我很好奇从桌面获取像素
如果窗口被另一个窗口覆盖,我可以使用GetPixel
函数获取屏幕像素吗?在我的窗口被覆盖的状态下,我试图调用GetPixel
:
GetPixel(hdc, x, y);
但是这个调用不会检索原始窗口的像素,而是覆盖窗口或其他颜色的像素。
如何获取被遮盖窗口的像素?
我将我的代码添加为以下内容......
VOID GetDisplay(HWND& hwnd, RECT& area, COLORREF (*display)[1000]) {
HDC hdc=GetDC(hwnd);
for(INT x=area.left;x<=area.right;x++) {
for(int y=area.top;y<=area.bottom;y++) {
display[x][y]=GetPixel(hdc, x, y);
}
}
ReleaseDC(hwnd, hdc);
}
...
SetWindowPos(hwnd, HWND_TOPMOST, 300, 300, 500, 350, SWP_SHOWWINDOW | SWP_NOMOVE | SWP_NOSIZE);
SetForegroundWindow(hwnd);
SetActiveWindow(hwnd);
//EnableWindow(hwnd, TRUE);
SetFocus(hwnd);
GetDisplay(hwnd, within_wall, display);//trouble
问题是GetDisplay中的GetPixel造成的。 GetPixel返回覆盖窗口的像素颜色。
答案 0 :(得分:0)
没有百分之百的方法可以做到这一点,因为窗口不需要,通常也不需要绘制模糊的区域。当然,您将无法将桌面设置为前景窗口。有人提到SetFocus
,焦点对可见性没有影响。那将是无效的。
我见过使用WM_PRINT
访问模糊像素的建议。再次这不能保证,但桌面窗口是非常具体的,所以如果你让它工作,我想它会有点可靠。
有关详情,请参阅:PrintWindow
。
对于它的价值,GetPixel
非常慢。您可能会注意到代码中存在性能问题。使用GetDIBits
等方法可以获得更好的性能。