在Xlib窗口中根据颜色的HSV值更改像素的Alpha值

时间:2018-08-26 21:49:47

标签: x11 transparent alpha color-mapping translucency

这可能有点令人困惑,请询问是否需要进一步说明。 因此,我有一个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)

enter image description here enter image description here enter image description here enter image description here enter image description here enter image description here

我将如何去做,我在想也许有一种方法可以将颜色映射到其他颜色(例如,将像素颜色格式转换为HSV,然后将颜色映射为原来的颜色,但是将其值HSV部分作为Alpha)。

0 个答案:

没有答案