Direct2D / SharpDX: почему качество LinearGradientBrush такое низкое? - PullRequest
0 голосов
/ 02 апреля 2019

Я использую 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 не уменьшает его):

Direct2D LinearGradientBrush

Проблема гораздо заметнее при больших целевых размерах рендера.

Та же машина, вот Photoshop CC 2019 с теми же цветами остановки (500x250, чтобы StackOverflow не уменьшал его):

Photoshop CC 2019

Я увеличил масштаб каждого скриншота, и алгоритм дизеринга Direct2D кажется ужасным по сравнению с Photoshop. Я понимаю, что в этом тонком градиенте просто не так много цветов, поэтому я не прошу больше цветов, а лучше смешиваюсь. Есть ли какие-либо настройки, которые я могу использовать для улучшения качества рендеринга мелких градиентов, подобные этим в Direct2D?

Я также читал о GradientStopCollection1, который имеет оболочку в SharpDX, но, кажется, нигде не может быть использован. Решит ли это мою проблему?

...