我在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不会缩小它):
在较大的渲染目标尺寸下,该问题更加明显。
同一台机器,这是具有相同停止色的Photoshop CC 2019(500x250,因此StackOverflow不会缩小它):
我放大了每个屏幕截图,与Photoshop相比,Direct2D的抖动算法似乎很糟糕。我意识到,在这种精细的渐变中,根本没有太多可用的颜色,因此我不是在要求更多的颜色,而是要更好地抖动。在Direct2D中是否可以使用任何设置来改善精细渐变的渲染质量?
我还读过GradientStopCollection1
,它在SharpDX中有一个包装器,但似乎在任何地方都不可用。这样可以解决我的问题吗?