我注意到在将wpf中的文本框选择设置为红色时,并使用颜色选择器验证颜色,颜色渐渐变为#FF9999。
我有一个特定的颜色,我的客户需要选择画笔。有没有办法计算我应该将SelectionBrush设置为什么颜色,所以当选择文本时,会显示确切的颜色?
目前我需要将选择画笔设为#6599D1,但一旦设置,颜色为#C1D6ED。
如何计算起始颜色,以便最终颜色是我需要的?
答案 0 :(得分:3)
通过H.B.
跟进答案我在过去使用以下公式计算了不透明度
Red = OriginalRed * Opacity + (1-Opacity) * BackgroundRed
反转为
(Red - (1-Opacity) * BackgroundRed) / Opacity = OriginalRed
TextBox
默认Background
设为白色,SelectionOpacity
设为0.4。
作为H.B.解释说,使用这些默认设置无法实现颜色,因为红色值将显示为-130。这为您提供了3个选项,更改Background
,更改SelectionOpacity
或不执行此操作:)
更改TextBox Background
可能不是你想做的事情,因此留下选项2,更改SelectionOpacity
我们不希望Red低于0,所以
(101 - (1-Opacity) * 255) = 0
给出了
1 - (101/255) = Opacity
这导致0,604,因此使用此SelectionOpacity
值,您可以计算一旦应用了不透明度,SelectionBrush
需要设置为#0056B3
才能变为#6599D1
。
以下是TextBox
查看这些值的方式
<TextBox SelectionBrush="#0056B3"
SelectionOpacity="0.604" />
答案 1 :(得分:2)
好问题,但我认为这是不可能的。如果ControlTemplate中有一些叠加,则无法制定计算颜色较深的函数,然后最终将其作为预期颜色。
e.g。当你输入红色: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
以下分量的颜色都是不可逆的。