【问题标题】:How can I avoid color banding in WPF's LinearGradientBrushes?如何避免 WPF 的 LinearGradientBrushes 中出现色带?
【发布时间】:2016-05-16 23:21:57
【问题描述】:

除了在软件中使用图像和抖动渐变(或乱用为我进行抖动的像素着色器),我可以做些什么来避免在 WPF 中使用 . NET 4.6.1?

相关:有没有办法强制 WPF 在后台使用 16bpc 颜色?

【问题讨论】:

  • 这是否只发生在单色渐变中,并且只发生在 .NET 4.6 中?
  • 按照设计,一旦它们变得足够大,所有 8bpc 渐变都会出现色带。

标签: c# .net wpf colors linear-gradients


【解决方案1】:

我发现的一种方法是将渐变添加到容器中,给它一个小的负边距以便它溢出一点,在渐变中添加一个 BlurEffect,然后在父容器上打开 ClipToBounds。这样,梯度会以牺牲性能为代价变得更好一些。

但是,根据您的用例,这可能不可行。

例子:

<Grid Height="26" Margin="-5,0" ClipToBounds="True">
    <Grid Margin="-5">
        <Grid.Effect>
            <BlurEffect Radius="6" />
        </Grid.Effect>
        <Grid.Background>
            <LinearGradientBrush>
                <GradientStop x:Name="GradientStop7" Color="Magenta" Offset="0.0" />
                <GradientStop x:Name="GradientStop8" Color="DarkOrchid" Offset=".2" />
                <GradientStop x:Name="GradientStop9" Color="Purple" Offset="1" />
            </LinearGradientBrush>
        </Grid.Background>
    </Grid>
</Grid>

负梯度应该等于模糊半径,这样它就不会在边缘变得透明。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-18
    • 1970-01-01
    • 2011-07-13
    • 1970-01-01
    • 2017-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多