3

私の質問は、一般的に、X11 または Gtk などのツールキットを使用して、Linux でレイヤード ウィンドウを作成して配置する方法です。レイヤード ウィンドウとは、rgb とアルファ (透明度) チャネルを含むピクセル データによって形状と透明度が定義されるウィンドウを意味します。以下のスクリーンショットを参照してください。

私は単純な UpdateLayeredWindow API を使用して Windows で広く使用してきましたが、Linux で同じことを行う方法を知りたいと思っています。

ありがとう。

Windows でのレイヤード バタフライ

4

3 に答える 3

2

X11 はもともと 1 ビットの透過性のみをサポートしています (SHAPE 拡張が必要ですが、最近ではほぼすべての X11 サーバーがそれを実装しています)。XShapeCombineMaskまたはgtk_widget_shape_combine_mask機能を使用します。

アンチエイリアス処理された透明度が必要な場合、おそらく最も簡単な方法は cairo ツールキットを使用することです。例はここにあります。

于 2012-05-02T19:49:05.763 に答える
1

X11 には 2 つの方法があります。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 に答える