Преобразовать 8-битный компонент цвета в 16-битный компонент цвета
Я пишу GTK+
приложение, которое использует Pango
атрибуты текста, чтобы определить цвет и другие аспекты текста, записанного на GtkLabel
используя что-то вроде этого:
attributes = pango_attr_list_new();
pango_attr_list_insert(attributes, pango_attr_foreground_new( G_MAXUINT16, G_MAXUINT16, G_MAXUINT16));
pango_attr_list_insert(attributes, pango_attr_size_new (18 * PANGO_SCALE));
pango_attr_list_insert(attributes, pango_attr_weight_new( PANGO_WEIGHT_BOLD ));
lblTotalCredits = gtk_label_new(NULL);
gtk_label_set_text(GTK_LABEL(lblTotalCredits),"0");
gtk_label_set_attributes(GTK_LABEL(lblTotalCredits), attributes);
pango_attr_foreground_new()
ожидает, что каждый цветовой компонент ( R,G,B) до 16 бит. Используя Photoshop или другие инструменты обработки изображений, я могу найти цвет, который хочу использовать, но значения R, G, B отображаются как 8-битные компоненты R, G, B.
Как мне преобразовать 8-битные значения R, G, B в эквивалентные 16-битные значения R, G, B, чтобы в результате я получил один и тот же цвет?
Например, золотой цвет указывается как RGB ( 229, 202, 115) или шестнадцатеричный e5ca73. Как я могу преобразовать это так, чтобы каждый компонент цвета был 16 бит для pango
функции?
1 ответ
Макс 8 бит: 0xFF
16 бит максимум: 0xFFFF
конвертировать (я использую красный как демо) (не проверено):
guint32 colorhex = 0xe5ca73;
const guint8 red8 = (guint8)((colorhex & 0xFF0000) >> 16);
// guint16 red16 = (guint16)(((guint32)(r * 0xFFFF / 0xFF)) & 0xFFFF);
guint16 red16 = ((guint16)red8 << 8) | red8;