Converting Color to ConsoleColor?

前端 未结 8 1355
面向向阳花
面向向阳花 2020-12-02 21:22

What is the best way to convert a System.Drawing.Color to a similar System.ConsoleColor?

8条回答
  •  情话喂你
    2020-12-02 21:42

    public static System.ConsoleColor FromColor(System.Drawing.Color c) {
        int index = (c.R > 128 | c.G > 128 | c.B > 128) ? 8 : 0; // Bright bit
        index |= (c.R > 64) ? 4 : 0; // Red bit
        index |= (c.G > 64) ? 2 : 0; // Green bit
        index |= (c.B > 64) ? 1 : 0; // Blue bit
        return (System.ConsoleColor)index;
    }
    

    The ConsoleColors enumeration seems to use the EGA style palette ordering, which is:

    index Brgb
      0   0000  dark black
      1   0001  dark blue
      2   0010  dark green
      3   0011  dark cyan
      4   0100  dark red
      5   0101  dark purple
      6   0110  dark yellow (brown)
      7   0111  dark white (light grey)
      8   1000  bright black (dark grey)
      9   1001  bright blue
     10   1010  bright green
     11   1011  bright cyan    
     12   1100  bright red
     13   1101  bright purple
     14   1110  bright yellow
     15   1111  bright white
    

    You can roughly map a 24-bit colour (or 32-bit colour, by ignoring the alpha channel) to what is essentially 3-bit colour with a brightness component. In this case, the 'brightness' bit is set if any of the System.Drawing.Color's red, green or blue bytes are greater than 128, and the red, green, blue bits are set if the equivalent source bytes are higher than 64.

提交回复
热议问题