【问题标题】:How to read a pixel off of the screen?如何从屏幕上读取一个像素?
【发布时间】:2010-12-14 09:07:50
【问题描述】:

我正在尝试为网页游戏制作一个简单的机器人,因此我希望能够读取屏幕上像素的颜色。我已经在 Windows 上使用 GetPixel() 完成了此操作,但在 OS X 上似乎无法弄清楚。我一直在网上查找并遇到了 glReadPixel。当我在 XCode 中制作一个简单的命令行工具时,我输入了以下代码。但是,我似乎无法让它发挥作用。我不断收到 EXC_BAD_ACCESS 错误:

GLfloat r;
glReadPixels(0, 0, 1, 1, GL_RED, GL_FLOAT, &r);

我认为上面的代码会将 (0,0) 处像素的红色值存储到 r 中。哦,我想避免采用屏幕截图的方法,因为那很慢。有什么帮助吗?

附:使用命令行工具,我的最终目标是制作一个 bash 脚本或一个 applescript,因为我已经有了一个可以点击屏幕的命令行工具。

【问题讨论】:

  • 当你调用glReadPixels()时你有一个活跃的OpenGL上下文吗?
  • 不。你能指出我正确的方向吗?
  • 我希望活动的 OpenGL 上下文成为主屏幕。
  • 在大多数操作系统中,您无法获取整个屏幕的 OpenGL 上下文。有一些解决方法,但我不建议使用它们。不过,大多数操作系统都会为您提供屏幕抓取功能。您已经知道 Windows 变体(屏幕 DC 上的 GetPixel)。这是高度特定于操作系统的,因此您必须为要支持的每个操作系统重写代码。 OpenGL 主要专注于在屏幕上显示内容。
  • 哦,我明白了。屏幕 DC 上是否有等同于 GetPixel 的 OSX?

标签: macos opengl screen-scraping pixel


【解决方案1】:

glReadPixels 只关心从帧缓冲区(图形卡绘制的区域)读取像素。

从“屏幕”读取像素与 OpenGL 完全无关。为此,您需要系统特定的功能。

【讨论】:

  • 哦,谢谢。你知道我如何在 Mac 上获取屏幕像素吗?
猜你喜欢
  • 2013-06-11
  • 2011-02-09
  • 2017-08-17
  • 1970-01-01
  • 2021-01-31
  • 2016-09-27
  • 1970-01-01
相关资源
最近更新 更多