0

レイヤード ウィンドウがあります (SetLayeredWindowAttributes を使用)。ウィンドウ全体のアルファを 128 に設定し、その上に黒い四角形を描画すると、期待どおりに動作します (約 50% の不透明度で透けて見える黒い四角形)。

ただし、ウィンドウ全体に aplha を設定し (SetLayeredWindowAttributes を 255 に呼び出した場合)、50% に設定されたブラシで黒い四角形を描画すると、黒い四角形は完全にソリッドになり、半透明性はまったくありません。

この方法でレイヤー化されたウィンドウを作成すると、さまざまなレベルのピクセルごとのアルファを使用して描画できるため、これら 2 つは 2 つのレベルの不透明度を描画できるという印象を受けました。

User32.SetLayeredWindowAttributes(this.Handle, (uint) TransparentColorKey.ToArgb(), 255, User32.LWA_ALPHA | User32.LWA_COLORKEY);

e.Graphics.FillRectangle( new SolidBrush(Color.FromArgb(200, 40, 40, 40)), myRect);
e.Graphics.FillRectangle( new SolidBrush(Color.FromArgb( 25, 40, 40, 40)), myRect);

しかし、これらの長方形は両方とも同じレベルの不透明度を持っています (1 つは 200、もう 1 つは 25 になると思います)。ウィンドウ全体(SetLayeredWindowAttributesの255)の不透明度のみを制御できます。

さまざまなレベルのアルファ半透明度で、さまざまな要素 (長方形だけでも) を描画できるようにするために、ここで何が欠けていますか?

ところで、デバイス コンテキストを使用してアクティブな描画を行っているため、(UpdateLayeredWindow ではなく) SetLayeredWindowAttributes が必要です。後者のアプローチでは、ビットマップを作成して一度に提供する必要があります。ありがとう!デイブ

4

1 に答える 1

1

SetLayeredWindowAttributes を使用するとアルファ データをウィンドウに直接描画できるようにする必要があるという考えをどこで得ているのかわかりません。MSDN のドキュメントから、一定のアルファまたはカラー キーイングのみが許可されているようです。ピクセルごとのアルファを取得する唯一の方法は、UpdateLayeredWindow を使用することです。

于 2013-01-10T02:00:49.500 に答える