2012-05-02 61 views
3

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

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

谢谢。

Layered butterflies on Windows

回答

2

X11最初只支持一位透明度(需要的形状扩展,但这些天几乎所有的X11服务器上实现它)。使用XShapeCombineMaskgtk_widget_shape_combine_mask函数。

如果你想抗锯齿的透明度,那么可能是最简单的方法是使用开罗工具包。一个例子可以发现here

0

要使用的透明度在X11,你需要

  1. create window with 32 bit depth(你需要指定32位视觉,backpixel,颜色表,当你创建窗口borderpixel)
  2. 上窗表面
  3. 平局ARGB画面(或窗口像素图如果你用背景像素图创建它)。请注意,您需要使用预乘ARGB(a = 128,r = 255,g = 255,b = 255是非透明白色,a = 128,r = 128,g = 128,b =透明白色)。您可以使用标准绘图命令,XRender或使用PutImage请求发送ARGB位图。
0

在X11有两种可能的方法:通过SHAPE扩展简单的位图掩码(即使是很老的X服务器协同工作),或使用ARGB视觉效果和合成。我在这个答案中提供了在ARGB可视窗口上执行OpenGL渲染的示例代码:

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