Xlib解析的颜色无法渲染

时间:2018-10-05 06:24:00

标签: c linux colors xlib system-tray

我正在尝试为Linux制作系统任务栏程序(在具有不同显示器和视频驱动程序的两台不同机器上对alpine和debian进行测试)。

// parse a color
XColor parsed;
parsed.flags = 0;

// input is white #FFFFFF
int found_color = XParseColor(dpy, wa.colormap, "#FFFFFF", &parsed);

// the above fails, but the following succeeds
// int found_color = XParseColor(dpy, wa.colormap, "#FF00FF", &parsed);
printf("found color: %x\n", found_color);

printf("parsed pixel: %d %d %d\n", parsed.red, parsed.green, parsed.blue);

if(XAllocColor(dpy,wa.colormap,&parsed) == 0){
    printf("Failed to allocate color\n");
    return 1;
}

printf("cm: %lx\n", wa.colormap);
printf("pp: %lu\n", parsed.pixel);

win = XCreateSimpleWindow(dpy, root, 0, 0, width, height, 0, 0, parsed.pixel);

这将输出以下内容:

  

发现颜色:1

     

解析的像素:65280 65280 65280

     

cm:22

     

pp:16777215

Xlib查找由代码#FFFFFF定义的颜色,返回相应的u16颜色级别,然后返回十进制值16777215,即0xFFFFFF。

所以这里的一切看起来都很不错。但是在我的任务栏中,窗口只是透明的。如注释掉的XParseColor调用中所述,如果将值更改为FF00FF,则任务栏中会出现一个漂亮的洋红色正方形。

由于某些原因,某些值对我而言并不适用。另一个示例是#0000FF。 100%蓝色不会渲染,但是#0100FF可以渲染!

我认为我必须在色彩管理层中缺少一些小东西,但是我已经遍历了整个API,无法弄清缺少的东西。

我将颜色转换为精确的XColor,然后在调用XAllocColor时得到硬件支持的近似颜色。

(完整代码here可用)

0 个答案:

没有答案