48-bit colours?

Quite often, especially in X11-related things (X resources, Roxterm themes, etc) I see colours specified as 48-bit numbers: #2e2e34343636, #cccc00000000 instead of the usual 24-bit #2e3436 and #cc0000. What are the extra bits used for?


Solution 1:

I found the answer in Xlib documentation under "Color strings". It seems that Xlib actually uses 16 bit RGB values for colors:

RGB Device String Specification

[...] an older syntax for RGB Device is supported, but its continued use is not encouraged. The syntax is an initial sharp sign character followed by a numeric specification, in one of the following formats:

#RGB          (4 bits each)
#RRGGBB       (8 bits each)
#RRRGGGBBB    (12 bits each)
#RRRRGGGGBBBB (16 bits each)

The R, G, and B represent single hexadecimal digits. When fewer than 16 bits each are specified, they represent the most significant bits of the value (unlike the “rgb:” syntax, in which values are scaled). For example, the string “#3a7” is the same as “#3000a0007000”.

Solution 2:

I can't speak to X11's use of them, but generally: additional color values which cannot be produced at lesser bit depths and alpha channels.

Solution 3:

From the examples you give they are not being used at all since the 24 bit value is simply being repeated (a bit like the practice of using only 3 hex characters to represent "websafe" colours so #c00 means the same as #cc0000 or 204,0,0, extended to #cccc00000000).

32-bit values would usually use the last byte for alpha channel (transparency). I guess it's possible that the 48-bit values are using 24-bit colours with an independent alpha per colour, but the examples you give don't support this.