【问题标题】:Create window of a smaller depth than that of VisualInfo创建比 VisualInfo 深度更小的窗口
【发布时间】:2014-05-19 14:23:20
【问题描述】:

我机器上视觉效果的深度值为 24。是否可以创建深度较低的 X 窗口(例如 16)? 如果是怎么办?任何指向示例代码的指针都会很有用。

XSetWindowAttributes attrs;

attrs.colormap = XCreateColormap(dpy, XDefaultRootWindow(dpy), visual, AllocNone);
attrs.background_pixel = 0;
attrs.border_pixel = 0;

XCreateWindow(dpy, parent, 10, 10, 150, 100, 0, 16, InputOutput,
                visual, CWBackPixel | CWColormap | CWBorderPixel, &attrs);

上面的代码给了我匹配错误。视觉参数具有 24 位深度。

提前致谢。

【问题讨论】:

    标签: x11 xlib


    【解决方案1】:

    并非所有服务器都提供所有可能的深度。运行xdpyinfo | grep depths 以查看您的支持,或从您的应用程序中调用XListDepths

    例如,在我的家用计算机上,X 服务器支持 16 的深度,但在我的工作计算机上却不支持。

    EDIT窗口深度必须与视觉深度完全匹配,否则会出现 BadMatch 错误。

    XListDepths 可用于查询哪些视觉对象支持给定深度。如果所有视觉对象的深度均为 24,则每个窗口的深度都必须为 24。并非所有列出的深度都可以在给定服务器上实现为视觉对象。

    【讨论】:

    • 我同意。我的机器上只看到 24 位深度支持。那么“最大深度”究竟是什么意思呢?根据我的阅读,XCreateWindow() 中的深度值可能小于最大深度。
    • “XCreateWindow() 中的深度值可以小于最大深度”——仅当它在服务器支持的深度列表中时。我的工作服务器支持 24、32、8、4、1 的深度。我可以创建深度为 8 或 24 的窗口,但不能创建 16。
    • 有点混乱。 'xdpyinfo' 输出显示 - 屏幕 #0: depths (7): 24, 1, 4, 8, 15, 16, 32 但是所有的视觉效果都有 - depth: 24 planes 是否仍然可以创建深度更小的窗口即使我没有 16 位深度的“视觉”,也比最大深度?
    • 现在你让我怀疑自己的话了。如果你调用深度为 16 的 XMatchVisualInfo,你会得到任何匹配的视觉对象吗?
    • 如有错误请指正。由于没有一个视觉对象具有 16 位深度,因此 XMatchVisualInfo 无法返回任何匹配的视觉对象。我在我的机器上试了一下验证。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-21
    • 1970-01-01
    • 1970-01-01
    • 2018-04-12
    • 1970-01-01
    相关资源
    最近更新 更多