【发布时间】:2013-10-14 09:17:18
【问题描述】:
肉类
在 C 或 C++ 中有什么方法可以直接读取调色板的 RGB 值?特别有趣的是 xterm(和其他人)使用扩展颜色空间来定义多达 256 种终端颜色。
土豆
我想定义自己的颜色(使用 ANSI 转义序列,如\e]4;3;rgb:cc/78/33\e\\,或直接在 c 中)但我需要在重新定义用户颜色之前保存它们(在不太可能的情况下他们已经重新定义了他们的颜色),以便我可以在我的程序完成时恢复它们。破坏用户设置不好。
现在我的目标是使用 ANSI 转义序列以客户端方式执行此操作。但由于我找不到你如何获得颜色,我开始考虑用 c 或 c++ 来代替。
该解决方案将被编写为带有原生扩展(基本上是嵌入式 c 或 c++ 代码)的 ruby gem,我的目标是获得一个跨平台解决方案,即使主要目标是 OS X,其次是 Linux 环境。 .
酱
从我最初的实验中,我已经可以为调色板中的代码点定义我想要的任何颜色。我还可以轻松恢复默认系统颜色(因为它们是 ANSI 标准)。我在 ANSI 转义码中寻找一种方法来实现这一点,但没有找到。我认为这是保存在某个地方的内存中,如果有任何方法可以找到位置,读取颜色应该很容易......
甜点
总结目前在cmets中的信息:
看起来唯一能始终如一地做到这一点的方法是用不同颜色打印一个包含 █ 个字符的屏幕,然后从中提取颜色。由于该项目应该是跨三个主要操作系统的跨平台,并且由于 Linux 目前在用户使用时有 3 个显示管理器,而 Windows 有两个(7 和 8)我只能想象几个小时和几个小时的乐趣会是:)
所以我的“解决方案”™ 只是破坏用户的颜色(如果他们有系统默认值以外的任何其他颜色......让我们面对这种情况非常罕见)。我将提供一个设置文件,用户可以告诉插件如果他们对系统默认设置不满意,应该恢复哪些颜色。务实而无聊,但它让我再次开始这样做:)
【问题讨论】:
-
愚蠢的问题,但是你有没有四处寻找一些相关的问题? For example,这个讨论了关于获取区域或整个屏幕的解决方案的几种变体。我想知道使用 ::GetPixel 这样的东西是否适合你?
-
我已经阅读了关于 SO 和 SuperUser 等的所有相关问题。这里的问题是您处于控制台上下文中,因此获取像素值可能不是一种选择,因为您不能依赖拥有图形环境。我真正想要的是一个转义序列,或者是一种直接访问内存中颜色表的方法。虽然不可能接缝:/
标签: c++ c console-application xterm ansi-colors