Я использую Direct2D с SharpDX. Я заполняю прямоугольник с помощью 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 не уменьшал его):
Я увеличил масштаб каждого скриншота, и алгоритм дизеринга Direct2D кажется ужасным по сравнению с Photoshop. Я понимаю, что в этом тонком градиенте просто не так много цветов, поэтому я не прошу больше цветов, а лучше смешиваюсь. Есть ли какие-либо настройки, которые я могу использовать для улучшения качества рендеринга мелких градиентов, подобные этим в Direct2D?
Я также читал о GradientStopCollection1
, который имеет оболочку в SharpDX, но, кажется, нигде не может быть использован. Решит ли это мою проблему?