C XDefaultDepth和XDisplayPlanes–;什么';有什么区别?

C XDefaultDepth和XDisplayPlanes–;什么';有什么区别?,c,xlib,C,Xlib,对于XDefaultDepth,Xlib文档说明: 返回对象的默认根窗口的深度(平面数) 指定屏幕。此屏幕上还支持其他深度 对于XDisplayPlanes,它说: 返回指定屏幕的根窗口的深度 因此,基本上,两者都返回桌面的深度(根窗口)。 两者的参数数量和类型也相同。这令人困惑:/ 那么,这两者有什么区别呢? 因为从这个描述来看,它们似乎完全相同:q虽然它们在实现上可能相同(请参见grep root_depth/usr/include/X11/Xlib.h),但“深度”和“平面”之间存在语义差

对于
XDefaultDepth
Xlib文档说明:

返回对象的默认根窗口的深度(平面数) 指定屏幕。
此屏幕上还支持其他深度

对于
XDisplayPlanes
,它说:

返回指定屏幕的根窗口的深度

因此,基本上,两者都返回桌面的深度(根窗口)。
两者的参数数量和类型也相同。这令人困惑:/
那么,这两者有什么区别呢?

因为从这个描述来看,它们似乎完全相同:q

虽然它们在实现上可能相同(请参见
grep root_depth/usr/include/X11/Xlib.h
),但“深度”和“平面”之间存在语义差异

  • 窗口或pixmap的深度是它所包含的每个像素的位数 有图形上下文的深度是其可绘制内容的深度 可与graphicsoutput结合使用

  • 当pixmap或窗口被认为是[1位]位图的堆栈时,每个 位图称为平面或位平面

(来自)

我认为这就是他们提供独立接口的原因

回顾X11的历史

因为窗口可用的备份存储内存可能非常有限 珍贵的,尤其是在深陈列时,还有橱窗 属性,用于通知服务器需要删除屏幕的哪些平面 与像素值基一起保存在备份存储中,以便 窗口可以在暴露时重新生成

然后,可以通过限制输出来绘制覆盖图形(请参见下一页) 节)返回的掩码中指定的单个位平面 颜色分配。将此平面中的位打开(转到l)会更改 将图像还原为第五种颜色,并将其禁用会将图像还原为第五种颜色 它原来的颜色

有一些Xlib函数,如
XCopyPlane
,可以在单个计算机上运行
飞机如果我在使用平面,并且想知道我必须使用多少个平面,那么调用
XDisplayPlanes()
比调用
XDefaultDepth()

更有趣的阅读:它们以相同的方式实现的事实并不意味着它们总是以这种方式实现。当使用API时,我们不应该依赖于它的当前实现,因为这可能会改变。重要的是这些接口的语义,这就是我要问的(为什么有两个不同的函数,它们在使用上的区别是什么)。不过,谢谢你给我的链接。很高兴能够在引擎盖下看到它是如何工作的;)隐马尔可夫模型。。。“深度”和“飞机数量”之间的区别我还不清楚。因为在文档中的许多地方,它们似乎可以互换使用,好像“深度”应该特别指“平面数”。但感谢您提供的文档,它们似乎比文档更具信息性,并为我遇到问题的API的其他一些方面(例如视觉效果)提供了一些启示。如果我弄错了,请纠正我的错误,但以下是我从您提供的材料中收集的信息:“深度”只涉及实际像素的位平面数,但实际的平面数量可能会超过这个数量,以考虑一些额外的平面,比如覆盖层、后备存储等等?我想像素深度和平面数量可能会有所不同,而这将通过提供不同的接口来实现。但实际上,他们只是用不同的方式来看待相同的数据。我同意你关于语义学的评论,我将更新我的答案。