【问题标题】:WPF DropShadowEffect - Unexpected Color DifferenceWPF DropShadowEffect - 意外的色差
【发布时间】:2013-08-08 16:14:08
【问题描述】:

我有一个带有 DropShadowEffect 的 TextBlock。某些阴影颜色比指定的颜色更暗,几乎就像它们被着色一样。但是,并非每种颜色都会发生这种情况。有谁知道为什么,或者有什么纠正方法吗?

这是一个非常基本的例子:

<StackPanel>
    <StackPanel.Resources>
        <Style TargetType="{x:Type TextBlock}">
            <Setter Property="FontSize" Value="100" />
            <Setter Property="Text" Value="THIS IS TEXT WITH A SHADOW" />
        </Style>
    </StackPanel.Resources>

    <!-- Expected Result -->
    <TextBlock Foreground="#FFFF0000">
        <TextBlock.Effect>
            <DropShadowEffect ShadowDepth="20" Color="#FFFF0000" />
        </TextBlock.Effect>
    </TextBlock>

    <!-- Unexpected Result -->
    <TextBlock Foreground="#FF005E20">
        <TextBlock.Effect>
            <DropShadowEffect ShadowDepth="20" Color="#FF005E20" />
        </TextBlock.Effect>
    </TextBlock>

</StackPanel>

也许和原色有关??

【问题讨论】:

  • 我没有对此的解释,但我确实截取了这个结果的截图,甚至第一种情况下阴影也有不同的颜色。我无法在两者之间的差异之间得出相关性,但我想知道DropShadowEffect 是否正在改变颜色的亮度。我的工具不够先进,无法对此进行研究(我只能看到 RGB 和 HSV 色彩空间)。
  • 嗯,这很有趣......也许这里还有其他事情发生。
  • 是的,不幸的是,我们不能使用反射器来检查这段代码。除非有魔法版本的反射器可以获取着色器效果的 HLSL 代码。
  • 我通过 Kaxaml 运行了您的代码,没有发现任何异常。你能准确指出你所面临的问题吗?

标签: wpf colors


【解决方案1】:

它将 DropShadowEffect 转换为特定的 Sc 值。

您越接近 1,差异越小(因此 FF/255/1 工作得非常好)

通过对 ScRGB 的研究和研究,ScRGB 的 Gamma 值在 2.2 左右。因此,从 RGB 转换为 ScRGB 时,您可能需要除以 255,然后将值的 nth(2.2) 根除以得出最终值。

例如

value 5E is 94

94 / 255 = 0.36862745098039215686274509803922

2.2root of 94/255 = 0.635322735100355

0.635322735100355 * 255 = A2

因此当你将前景的ScG设置为5E时,需要将DropShadowEffect设置为A2。

这只是我的观察和研究得出的结论。

为什么微软要这样实现它?我不知道

来源:

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-13
  • 1970-01-01
  • 2013-04-10
  • 2013-12-26
  • 1970-01-01
相关资源
最近更新 更多