首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用Node.js或C获取屏幕上像素的颜色?

如何用Node.js或C获取屏幕上像素的颜色?
EN

Stack Overflow用户
提问于 2022-04-10 19:27:02
回答 2查看 590关注 0票数 0

我正在尝试使用node.js获取屏幕上像素的颜色。我希望它以RGB格式返回,例如(255,0,0)。我目前的解决方案是使用screenshot-desktop以JPG格式截图我的整个屏幕,对其进行解码以获取原始像素数据,并获取给定像素的颜色。然而,这比我的整个电脑落后1-2秒,因为它是截图。这是不可用的,因为我想要这样做多次每秒。因此,我的问题是:我如何才能获得屏幕上给定像素的颜色,而不采取完整的屏幕截图?

我正在与X11一起使用Linux。这里有一个用于X11的node.js库,所以我想我应该用它来获得像素的颜色,我只是不知道怎么做。如果您可以向我展示如何用C语言进行操作,那么我可以很容易地使用node.js来做同样的事情。

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2022-04-10 19:30:34

哦,天哪,我刚发完这篇文章就想出来了。我用robotjs来读取鼠标位置,我完全忘记了它也能做屏幕上的事情!所以,解决办法就是

代码语言:javascript
复制
var robot = require('robotjs');
var color = robot.getPixelColor(x, y);
票数 1
EN

Stack Overflow用户

发布于 2022-04-12 01:06:21

使用X11节点库的x11解决方案(我是作者):

  • 查询窗口树,QueryTree从根窗口
  • 开始使用GetGeometry request
  • 获取每个子几何,如果您的点不在任何子窗口中,则使用当前窗口id并从当前图像获取1x1像素映射:GetImage(format, currentWindow, x, y, 1, 1, planeMask) (格式为2,平面掩码为0xffffff )。在遍历窗口树时,请确保计算相对x位置。
  • ,如果子窗口覆盖了您的点,请查询该窗口的子窗口,然后再次重复。请注意,QueryTree以自下而上的顺序返回窗口,因此请确保选择覆盖点

的最后一个窗口。

一旦你从最上面的窗口得到了1x1像素映射--缓冲区应该只包含图像的颜色字节,RGB顺序和位掩码可能依赖于red_maskgreen_maskdisplay.screen[0].depths[visual]blue_mask

如果您在请求之间缓存“最顶层窗口”,并且只在不再匹配的情况下从根开始,那么上述解决方案可能比使用robotjs的解决方案(尽管级别更低、更复杂)的性能要高得多,祝您好运!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71819873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档