2016-07-21 4 views
1

透明キーを「ライム」に設定して「ライム」の背景色に対して丸いコーナーの背景画像を使用しようとしています。背景画像上のフォームコントロールが、ライム背景が丸みを帯びたエッジの周りに1ピクセルの透明度キーから削除されません。TransparencyKeyは丸みを帯びたコーナーの背景画像にピクセルを残します

1px ring left on all 4 corners

は、私はこの出来事を防ぐことができますどのように誰もが知っていますか?

+1

まあ、ええ、それはライムではありません。アンチエイリアスは正しく動作するために*実際の*背景色を知る必要があり、 'TransparencyKey'は単色でしか動作しません。 – Luaan

+1

グラフィックスエディタはピクセル内のアルファチャンネルを使用して、画像を任意の*背景色に適したものにしました。そうでなければ、アンチエイリアスは、背景がわかっているときにのみうまくいくので、スムーズに前景色から背景色に補間することができます。もちろん、透明キーを使用するときは機能しません。アルファが適用されても、それはもはやライムではありません。ピクセル単位のアルファブレンディングは、Winformsでは動作しません。ペイントイベント=デッドコントロールではありません。イメージを修正する必要があります。そして、あなたが知られている背中の色を持っていないときに、それがどうやって正しく動作するか疑問に思います。それはできません.. –

答えて

2

TransparencyKeyは単色で動作します。アンチエイリアスを使用して角を描くと、線の色が背景色と混ざり、表示される色がまったくLimeではなく、LimeGrayの混合で、角が滑らかになります。したがって、TransparencyKeyLimeに設定すると、その色は削除されません。

高品質のαブレンドラウンドコーナーを使用する場合は、Layered Windowsを使用することを検討してください。大幅レイヤードウィンドウをすることができます使用

:あなたの形のフォームを、あなたはポストの下で見つけることができ、その後の技術を用いて丸い四角形のスムーズな描画を含む透明な背景を持つビットマップを作成します複雑な形状を持つウィンドウに対してパフォーマンスを向上させたり、 ビジュアルエフェクトを適用したり、 シェイプをアニメーション化したり、アルファブレンディングエフェクトを使用したりすることができます。システム は、階層化されたウィンドウと、基礎となるアプリケーション のウィンドウを自動的に合成して再ペイントします。その結果、複雑なウィンドウ領域にちらつきが生じることなく、レイヤードウィンドウが円滑にレンダリングされます( )。 では、レイヤードウィンドウは部分的に半透明、つまり アルファブレンドされます。

重要な注意

上記の技術は、単純なスプラッシュ画面を作成するのに便利ですが、あなたは、フォーム上のいくつかのコントロールを配置したい場合、あなたは回避策を使用する必要があります。

メインフォームに加えて、別のウィンドウをWS_EX_LAYEREDスタイルで作成し、それを使用してアルファブレンド背景イメージを表示することができます。次に、このウィンドウがメインフォームの背後にあることを確認するだけです。はい、これは簡単なことではありませんが、ここではタスクを本当に簡単にするライブラリがあります。アイデアと実装のためのアンソニーMushrowのおかげ:

+0

ありがとうReza、私はPerPixelAlphaForm.csクラス、私のメインフォームは、(テキストボックスなど)上のすべてのフォーム要素を持つクラスを継承し、背景画像でSelectBitmapメソッドを呼び出すパラメータとして(MyMainForm.SelectBitmap(Properties.Resources.rounded1);)。残念ながら、フォーム全体が完全に白くなっていますが、これにもかかわらず、すべてのコントロールを使用することができますが、それはなぜですか? –

+0

はい、私が知っているのは、これが**ノート**の部分を投稿した理由です。 'PerPixelAlphaForm'はスプラッシュ画面を作成するのに本当に便利です。しかし、フォーム上にいくつかのコントロールを配置したい場合は、透明な背景のメインフォームをアルファブレンドしたフォームに配置するという考え方に従います。 –

+0

ああ、ありがとう、更新を見ていない...私はこれを行ってあげるよ。 –

関連する問題