这可能有点令人困惑,请询问是否需要进一步说明。 因此,我有一个X11窗口,其创建方式如下:({https://github.com/Aaahh/xwinwrap/blob/master/xwinwrap.c代表完整文件)
XSetWindowAttributes attrs = {ParentRelative,
0L,
0,
0L,
0,
0,
Always,
0L,
0L,
False,
StructureNotifyMask | ExposureMask,
0L,
True,
0,
0};
if (have_argb_visual) {
attrs.colormap = window.colourmap;
attrs.border_pixel = 0;
attrs.background_pixel = 0x80ffffff;
flags |= CWBorderPixel | CWColormap | CWBackPixel;
} else {
flags |= CWBackPixel;
}
window.window = XCreateWindow(display, window.root, window.x, window.y,
window.width, window.height, 0, depth,
InputOutput, visual, flags, &attrs);
和
XVisualInfo visual_template;
XVisualInfo *visual_list;
int nxvisuals = 0, i;
visual_template.screen = screen;
visual_list =
XGetVisualInfo(display, VisualScreenMask, &visual_template, &nxvisuals);
for (i = 0; i < nxvisuals; i++) {
if (visual_list[i].depth == 32 && (visual_list[i].red_mask == 0xff0000 &&
visual_list[i].green_mask == 0x00ff00 &&
visual_list[i].blue_mask == 0x0000ff)) {
*visual = visual_list[i].visual;
*depth = visual_list[i].depth;
if (debug)
fprintf(stderr, "Found ARGB Visual\n");
XFree(visual_list);
return 1;
}
}
因此,当在窗口上绘制透明像素时(使用使用窗口ID推入窗口的程序)(例如/ usr / lib / xscreensaver / glmatx -window-id WID),此方法有效。
我面临的基本问题是,在缺少相同色深的程序上(因此将所有alpha设置为0),我想将alpha从0替换为HSV格式的颜色的“值”将所有黑色像素更改为Alpha 1更容易。 我的想法是我想与argb融合,重新创建此错误:https://github.com/brndnmtthws/conky/pull/84
因此将图像转换成这样:(如果背景是黑色,则图像是正常的,所以我认为如果有意义的话,它是黑色到alpha)
我将如何去做,我在想也许有一种方法可以将颜色映射到其他颜色(例如,将像素颜色格式转换为HSV,然后将颜色映射为原来的颜色,但是将其值HSV部分作为Alpha)。