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.