我目前正在尝试为控制台和终端模拟器创建某种类型的图形界面框架,类似于lanterna,但是采用了更具说明性的方法,但是我对几天来让我头痛的事情感到厌烦:颜色。
我期待的是一种独立于底层实现和方案来表示颜色和调色板的方法( ANSI ,索引,用于VGA,xterm,Windows的24位。我最初的想法是创建一个表示RGB颜色空间中颜色的简单结构:
public struct Color {
public byte R, G, B;
}
...并声明一组预定义的颜色,例如public static readonly Color Black = new Color(0, 0, 0);
但是这可能无效,因为例如 xterm 上的 red 与 Windows控制台中的 red 不同。然后我考虑使用enum
,但在这里我无法定义颜色的确切值。
有什么可能的方法来实现这个目标?是否有其他颜色空间可能比 RGB 更适合表示颜色?
答案 0 :(得分:1)
此外,如果它们可以组合就会很好:例如:Color Yellow = Color.Red | Color.Green。这有什么意义吗?
如果Color只是一个整数,那么Color.Yellow == Color.Red | Color.Green无需任何额外代码即可工作(相当于0xFFFF00 == 0xFF0000 | 0x00FF00)。如果你想让颜色具有单独的R,G和B属性,那么你可以做一些花哨的运算符重载并让它仍然有效。
我期待的是一种表示颜色和调色板的方法,与底层实现和方案无关(ANSI,索引,24位用于VGA,xterm,Windows ..)。我最初的想法是创建一个表示RGB颜色空间中颜色的简单结构:
...
是否有其他颜色空间可能更适合表示 颜色比RGB?
我是这个人的粉丝:
http://en.wikipedia.org/wiki/Lab_color_space
这解释了原因:
http://mycarta.wordpress.com/2012/05/29/the-rainbow-is-dead-long-live-the-rainbow-series-outline/