【发布时间】:2016-08-27 14:57:21
【问题描述】:
我为我正在处理的图形工具包项目编写了一个 X“屏幕驱动程序”。作为最后一步,我的工具包调用将相关数据绘制到屏幕的 Xlib 函数。
问题在于,在我的工具包中,颜色以 32 位长整数的形式表示和传递。我读过的所有关于 Xlib 的文档都使用 XAllocColor 来定义颜色图中的每种颜色。
问题是,与我的图形例程相比,XAllocColor 相当慢,我想避免分配使用的每种单一颜色(也因为我没有预先列出列表)。
如何在 Xlib 中绘制任意颜色的东西而不分配每个颜色?
【问题讨论】:
-
记不清了,但可以使用 DirectColor 模式?
-
据我所见,但我可能错了,DirectColor 是您无论如何都必须分配的颜色的表示。
-
你说得对(我的记忆在这里失败了 - 20 年来没有 Xlib 编程),但它不是带有 TrueColor 的 24 位图模式吗? (或类似的东西)。我记得您可以管理帧缓冲区以注入 24 位(只要显示器能够)。
-
感谢您的提示,但我真的找不到在代码中执行此操作的方法。我见过的每篇文档都使用 XAllocColor。
-
您不必为 TrueColor、StaticColor 和 StaticGray 视觉效果分配颜色。最后两个现在应该相当罕见,不知道谁使用它们。 TrueColor 像素本身就是 RGB 值,如果您有 TrueColor,那么 0xRRGGBB 确实会按预期工作。对于 DirectColor 和 PseudoColor,使用 XAllocColorCells 或 XAllocColorPlanes 一次分配一组颜色,并使用 XStoreColors 存储实际像素值。灰度也一样(希望现在已经灭绝)。
标签: c graphics colors x11 xlib