Direct2D / SharpDX:为什么LinearGradientBrush的质量这么低?

时间:2019-04-01 23:26:26

标签: sharpdx direct2d

我在SharpDX上使用Direct2D。我用LinearGradientBrush填充矩形:

var brush = new LinearGradientBrush(
    renderTarget,
    new LinearGradientBrushProperties
    {
        StartPoint = bounds.ToRawVector2TopLeft(),
        EndPoint = bounds.ToRawVector2BottomLeft()
    },
    new GradientStopCollection(
        renderTarget,
        new[]
        {
            new GradientStop
            {
                Color = new RawColor4(0.2f, 0.2f, 0.2f, 1f),
                Position = 0
            },
            new GradientStop
            {
                Color = new RawColor4(0.1f, 0.1f, 0.1f, 1f),
                Position = 1
            }
        }));
...
renderTarget.FillRectangle(bounds.ToRawRectangleF(), brush);

不幸的是,渐变质量非常糟糕(500x250,因此StackOverflow不会缩小它):

Direct2D LinearGradientBrush

在较大的渲染目标尺寸下,该问题更加明显。

同一台机器,这是具有相同停止色的Photoshop CC 2019(500x250,因此StackOverflow不会缩小它):

Photoshop CC 2019

我放大了每个屏幕截图,与Photoshop相比,Direct2D的抖动算法似乎很糟糕。我意识到,在这种精细的渐变中,根本没有太多可用的颜色,因此我不是在要求更多的颜色,而是要更好地抖动。在Direct2D中是否可以使用任何设置来改善精细渐变的渲染质量?

我还读过GradientStopCollection1,它在SharpDX中有一个包装器,但似乎在任何地方都不可用。这样可以解决我的问题吗?

0 个答案:

没有答案