8

wpf でテキスト ボックスの選択範囲を赤に設定し、カラー ピッカーを使用して色を確認すると、色が #FF9999 に薄くなったことに気付きました。

クライアントが選択ブラシに必要とする特定の色があります。テキストが選択されたときに正確な色が表示されるように、SelectionBrush を設定する必要がある色を計算する方法はありますか?

現在、選択ブラシを #6599D1 にする必要がありますが、一度設定すると、色は #C1D6ED になります。

開始色を計算して、終了色が必要になるようにするにはどうすればよいですか?

4

2 に答える 2

3

HBによる回答のフォローアップ

過去に次の式で不透明度を計算しました

Red = OriginalRed * Opacity + (1-Opacity) * BackgroundRed

に反転する

(Red - (1-Opacity) * BackgroundRed) / Opacity = OriginalRed

TextBoxデフォルトBackgroundは白にSelectionOpacity設定され、0.4 に設定されています。
HB が説明したように、赤の値が -130 になるため、これらのデフォルト設定では色を実現できません。Backgroundこれにより、変更、変更、SelectionOpacityまたはしないという3つのオプションが残ります:)

おそらく変更するTextBox Backgroundことはあなたがしたいことではないので、オプション2を残して、変更しますSelectionOpacity

赤が 0 を下回ることは望ましくないため、

(101 - (1-Opacity) * 255) = 0

を与える

1 - (101/255) = Opacity

この結果は 0,604 になるため、この値を使用して、不透明度が適用された後にをに設定する必要がSelectionOpacityあることを計算できます。SelectionBrush#0056B3#6599D1

これらの値のTextBox外観は次のとおりです

<TextBox SelectionBrush="#0056B3"
         SelectionOpacity="0.604" />

ここに画像の説明を入力

于 2011-08-12T00:36:09.653 に答える
2

良い質問ですが、これは不可能だと思います。ControlTemplate 内にオーバーレイがある場合、より暗い色を計算する関数を定式化することはできず、最終的に意図した色になります。

たとえば、赤を入力すると、次の255,0,0よう255,153,153になります。最初の色に適用する必要がある関数は、赤を暗くする必要があります。もちろん、緑と青はすでにゼロであるため、これは赤チャンネルでのみ実行できます。ただし、問題は赤のチャネルではなく (最終的に 255 になるため、影響を受けません)、それを変更しても、色を暗くするのではなく、色の彩度を下げるだけです。

編集:これをもう少し数学的にするために、選択の透明度によって適用される関数は次のとおりです。

f(x) = 0.4x + 153

これを色のすべてのチャネルに適用すると、実際にそうであることがわかります。では、必要な値を取得するにはどうすればよいでしょうか。非常に単純です。関数を反転します。これは次のとおりです。

f^(-1)(x) = -2.5(153.0 - x)

すごい!それをあなたの色に適用しましょう:

R: -130.0
G: 0
B: 140

うーん、結局のところ、それほど素晴らしいことではないと思います。

この負の値がまさに、これが常に可能であるとは限らない理由です。以下のコンポーネントを持つすべての色は元に戻すこと153ができません。

于 2011-08-11T16:37:01.550 に答える