3

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

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

谢谢。

Windows 上的分层蝴蝶

4

3 回答 3

2

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

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

于 2012-05-02T19:49:05.763 回答
1

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

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

于 2012-05-10T21:28:48.133 回答
0

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

  1. 创建 32 位深度的窗口(创建窗口时需要指定 32 位视觉、背景像素、颜色图和边框像素)
  2. 在窗口表面(如果使用背景像素图创建它,则在窗口像素图上)绘制 ARGB 图片。请注意,您需要使用预乘 ARGB ( a=128, r=255, g=255, b=255 是不透明的白色,而 a=128, r=128, g=128, b=128 是半透明的透明白色)。您可以使用标准绘图命令、XRender 或仅使用 PutImage 请求发送 ARGB 位图。
于 2012-05-03T01:07:23.113 回答