C# 代表颜色

C# 代表颜色,c#,.net,colors,terminal,console,C#,.net,Colors,Terminal,Console,我目前正在尝试为控制台和终端模拟器创建某种图形界面框架,类似于,但采用了更具声明性的方法,但我现在遇到了一些让我头疼了好几天的问题:颜色 我期待的是一种独立于底层实现和方案(ANSI、索引、VGA的24位、xterm、Windows等)来表示颜色和调色板的方法。我最初的想法是创建一个简单的结构,表示RGB颜色空间中的颜色: public struct Color { public byte R, G, B; } 。。。并声明一组预定义的颜色,例如publicstaticreadonly

我目前正在尝试为控制台和终端模拟器创建某种图形界面框架,类似于,但采用了更具声明性的方法,但我现在遇到了一些让我头疼了好几天的问题:颜色

我期待的是一种独立于底层实现和方案(ANSI、索引、VGA的24位、xterm、Windows等)来表示颜色和调色板的方法。我最初的想法是创建一个简单的结构,表示RGB颜色空间中的颜色:

public struct Color {
    public byte R, G, B;
}
。。。并声明一组预定义的颜色,例如
publicstaticreadonly Color Black=new Color(0,0,0)但是这可能不起作用,因为例如xterm上的红色与Windows控制台中的红色不同。然后我考虑使用
enum
,但在这里我无法定义颜色的确切值

实现这一目标的可能途径是什么?是否有其他颜色空间比RGB更适合表示颜色

此外,如果它们可以组合在一起也很好,例如:黄色= 颜色。红色。颜色。绿色。这有道理吗

如果Color只是一个整数,那么Color.Yellow==Color.Red | Color.Green在没有任何额外代码的情况下工作(它相当于0xFFFF00==0xFF0000 | 0x00FF00)。如果您希望颜色具有单独的R、G和B属性,那么您可以执行一些奇特的运算符重载,并使其仍然有效

我期待的是一种独立于底层实现和方案(ANSI、索引、VGA的24位、xterm、Windows等)来表示颜色和调色板的方法。我最初的想法是创建一个简单的结构,表示RGB颜色空间中的颜色:

public struct Color {
    public byte R, G, B;
}

是否还有其他更适合表示的颜色空间 颜色比RGB

我是这个的粉丝:

这就解释了为什么:


听起来你真正想要的是一个单一颜色的“名称”能够根据上下文有不同的定义?@JeffBridgman,是的。但命名颜色应仅为“预设”,因为它们没有任何意义,例如索引颜色。此外,如果它们可以组合在一起也很好,例如:Color Yellow=Color.Red | Color.Green。这有什么意义吗?是的,听起来您可能需要重写
Color
struct中的运算符以获得颜色“混合”。对于不同的常量,我会创建静态类,比如
XTermColors
,为每个环境的“Red”定义正确的RGB值。您可以通过某种方式使用继承/接口来提供一组通用的颜色名称,这些颜色名称可以在任何地方使用,具体的“实现”根据上下文进行交换。