Довольно часто, особенно в вещах, связанных с X11 (ресурсы X, темы Roxterm и т.д.), Я вижу цвета, указанные в виде 48-разрядных чисел: #2e2e34343636
, #cccc00000000
вместо обычных 24-разрядных #2e3436
и #cc0000
. Для чего используются дополнительные биты?
3 ответа
Я нашел ответ в документации Xlib в разделе "Цветные строки". Кажется, что Xlib на самом деле использует 16-битные значения RGB для цветов:
Спецификация строки устройства RGB
[...] поддерживается более старый синтаксис для RGB Device, но его дальнейшее использование не приветствуется. Синтаксис - это начальный символ с четким знаком, за которым следует числовая спецификация в одном из следующих форматов:
#RGB (4 bits each) #RRGGBB (8 bits each) #RRRGGGBBB (12 bits each) #RRRRGGGGBBBB (16 bits each)
R, G и B представляют собой одно шестнадцатеричные цифры. Когда указано менее 16 битов, они представляют наиболее значимые биты значения (в отличие от синтаксиса «rgb:», в котором значения масштабируются). Например, строка «
#3a7
» совпадает с «#3000a0007000
».
Я не могу говорить об их использовании в X11, но в целом: дополнительные цветовые значения, которые не могут быть получены на меньших битовых глубинах и альфа-каналах.
Из приведенных вами примеров они вообще не используются, поскольку 24-битное значение просто повторяется (немного похоже на практику использования только 3 шестнадцатеричных символов для представления «веб-безопасных» цветов, поэтому # c00 означает то же самое, что и # cc0000 или 204 , 0,0, расширен до # cccc00000000).
32-битные значения обычно используют последний байт для альфа-канала (прозрачность). Я предполагаю, что возможно, что 48-битные значения используют 24-битные цвета с независимой альфа-версией для каждого цвета, но примеры, которые вы приводите, не поддерживают это.