4

我想通过第三方应用程序(这不是我的游戏)读取游戏中给定位置的像素颜色(例如 OpenGL 或 DirectX)。

我尝试在 C# 中使用它,该代码非常适合读取桌面、窗口等的颜色,但是当我启动游戏时,我只得到 #000000,一个黑色像素。我认为这是因为我没有在正确的“位置”或类似的地方阅读。

有人知道该怎么做吗?我提到了 C#,但 C/C++ 也可以。

4

2 回答 2

0

在 Windows 上,有 GDI(图形设备接口):使用 GDI,您可以轻松获取设备上下文HDC dc = GetDC(NULL);,然后使用COLORREF color = GetPixel(dc, x, y);. 但请注意:您必须在之后(当您的程序的所有 GetPixel 操作完成时)释放设备上下文ReleaseDC(NULL, dc);- 否则您会泄漏内存。另请参阅此处了解更多详细信息。

但是,对于这样的任务,我建议您使用:Auto-it。它简单易用且非常简单(毕竟它只是为这样的操作而设计的)。

Local $color = PixelGetColor(200, 300)
MsgBox(0, "The color is ", $color )
于 2013-03-07T13:02:04.373 回答
0

在基本步骤中:如果游戏是全屏的,则使用适当的 OpenGL 或 Directx 命令抓取渲染屏幕的纹理。例如,glReadPixels您可以从当前绑定的帧缓冲区中获取窗口相对像素坐标处的像素值。如果不是全屏,则必须将窗口位置与窗口相对像素坐标结合起来。

一些松散的例子:

glBindFramebuffer(GL_FRAMEBUFFER, yourScreenFramebuffer);
glReadPixels(/* your pixel X, your pixel Y, GLsizei width, 1 pixel wide, 1 pixel tall, GL_RGBA or GL_RGB, GL_UNSIGNED_BYTE, *where to store your pixel value */);
于 2013-03-07T10:41:29.577 回答