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

标签 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 位?

最佳答案

最大 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;

关于colors - 将 8 位颜色分量转换为 16 位颜色分量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12043547/

相关文章:

java - Android 在使用 copyPixelsToBuffer 时如何应用 alpha channel ?

javascript - 如何将颜色 'Clear'设置为RGB或HEX?

c - Glade GTK+3 信号不工作

python - 如何使用 pycairo 创建字母间距属性?

c++ - PangoLayout中忽略的新行

colors - VK_COLOR_SPACE_PASS_THROUGH_EXT 是如何使用的?

javascript - canvas getImageData 方法是否依赖于机器/浏览器?

Gtk3标签行间距

rust - 尝试从 GTK-RS 应用程序的事件处理程序中添加到 `gtk::ListBox` 时似乎没有任何反应

python - 使用 (py) Cairo 创建带有内联图像的 pdf 文件