【问题标题】:Create a layered window on Linux X11/Gtk在 Linux X11/Gtk 上创建分层窗口
【发布时间】:2012-05-11 14:03:39
【问题描述】:

我的问题通常是如何使用 X11 或 Gtk 等工具包在 Linux 上创建和定位分层窗口。当我说分层窗口时,我的意思是一个窗口,其形状和透明度由包含 rgb 和 alpha(透明度)通道的像素数据定义。请参阅下面的屏幕截图。

我已经使用足够简单的 UpdateLayeredWindow API 在 Windows 上广泛使用它们,我想知道如何在 Linux 上做同样的事情。

谢谢。

【问题讨论】:

    标签: c# c++ gtk x11


    【解决方案1】:

    X11 最初只支持一位透明(需要 SHAPE 扩展,但现在几乎所有 X11 服务器都实现了它)。使用XShapeCombineMaskgtk_widget_shape_combine_mask 函数。

    如果您想要抗锯齿透明度,那么可能最简单的方法是使用 cairo 工具包。一个例子可以在here找到。

    【讨论】:

      【解决方案2】:

      在 X11 中,有两种可能的方法:通过 SHAPE 扩展进行简单的位图遮罩(甚至适用于非常旧的 X 服务器),或使用 ARGB 视觉效果和合成器。我在这个答案中提供了在 ARGB 可视窗口上执行 OpenGL 渲染的示例代码:

      https://stackoverflow.com/a/9215724/524368

      【讨论】:

        【解决方案3】:

        要在 X11 中使用透明度,您需要

        1. create window with 32 bit depth(创建窗口时需要指定32bit visual、backpixel、colormap和borderpixel)
        2. 在窗口表面(如果使用背景像素图创建它,则在窗口像素图上)绘制 ARGB 图片。请注意,您需要使用预乘 ARGB(a=128, r=255, g=255, b=255 是不透明的白色,而 a=128, r=128, g=128, b=128 是半透明的透明白色)。您可以使用标准绘图命令、XRender 或仅使用 PutImage 请求发送 ARGB 位图。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-02-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多