如何设置Xlib窗口背景透明?

时间:2014-04-14 03:43:27

标签: background transparent xlib

我想创建一个具有透明背景的窗口。怎么做?

我使用XSetBackground(display, gc, 0),背景是黑色。我将屏幕深度更改为32。结果仍然是黑色的。这是我的代码:

    display = XOpenDisplay(getenv("DISPALY"));
    screen = DefaultScreen(display);
    depth = DefaultDepth(display,screen);
    printf("depth: %d\n", depth);
    rootwindow = RootWindow(display,screen);

    XVisualInfo vinfo;
    XMatchVisualInfo(display, DefaultScreen(display), 32, TrueColor, &vinfo);

    XSetWindowAttributes attr;
    attr.colormap = XCreateColormap(display, DefaultRootWindow(display), vinfo.visual, AllocNone);
    attr.border_pixel = 0;
    attr.background_pixel = 0; 

    window = XCreateWindow(display, DefaultRootWindow(display), 0, 0, 1440, 900, 0, vinfo.depth, InputOutput,
                    vinfo.visual, CWColormap | CWBorderPixel | CWBackPixel, &attr);

    gc = XCreateGC (display, window, 0, NULL);
   XSetBackground(display, gc, 0L);

1 个答案:

答案 0 :(得分:2)

你需要

  • 确保窗口深度为32
  • 设置透明区域的alpha位值
  • 确保您正在运行可以正确处理透明度的复合管理器

请参阅我的问题"How to upload 32bit pixmap to server",了解如何设置Alpha通道值

更新:还要确保您的窗口是使用关联的色彩映射创建的(我不知道这背后的原因,但我无法在没有色彩映射的情况下正确显示32位窗口)