将8位颜色分量转换为16位颜色分量

时间:2012-08-20 19:04:56

标签: colors gtk pango

我正在编写一个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。如何转换它以使pango函数的每个颜色分量为16位?

1 个答案:

答案 0 :(得分:3)

8bit max: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;