Генерируйте цветовой градиент в C#

Мой вопрос здесь подобен вопросу здесь, за исключением того, что я работаю с C#.

У меня есть два цвета, и у меня есть предопределять шаги. Как получить список Colors, которые являются градиентами между двумя?

Это - подход, который я попробовал, который не работал:

int argbMax = Color.Chocolate.ToArgb();
int argbMin = Color.Blue.ToArgb();
var colorList = new List();

for(int i=0; i

При попытке вышеупомянутого кода Вы найдете что постепенное увеличение argb не соответствует визуальному постепенному увеличению цвета.

Какая-либо идея об этом?

26
задан Community 23 May 2017 в 11:54
поделиться

2 ответа

Вы должны извлечь компоненты R, G, B и выполнить одну и ту же линейную интерполяцию на каждой из них в отдельности, а затем рекомбинировать.

int rMax = Color.Chocolate.R;
int rMin = Color.Blue.R;
// ... and for B, G
var colorList = new List<Color>();
for(int i=0; i<size; i++)
{
    var rAverage = rMin + (int)((rMax - rMin) * i / size);
    var gAverage = gMin + (int)((gMax - gMin) * i / size);
    var bAverage = bMin + (int)((bMax - bMin) * i / size);
    colorList.Add(Color.FromArgb(rAverage, gAverage, bAverage));
}
29
ответ дан 28 November 2019 в 06:36
поделиться
[

]Может быть, эта функция поможет:[

] [
public IEnumerable<Color> GetGradients(Color start, Color end, int steps)
{
    Color stepper = Color.FromArgb((byte)((end.A - start.A) / (steps - 1)),
                                   (byte)((end.R - start.R) / (steps - 1)),
                                   (byte)((end.G - start.G) / (steps - 1)),
                                   (byte)((end.B - start.B) / (steps - 1)));

    for (int i = 0; i < steps; i++)
    {
        yield return Color.FromArgb(start.A + (stepper.A * i),
                                    start.R + (stepper.R * i),
                                    start.G + (stepper.G * i),
                                    start.B + (stepper.B * i));
    }
}
]
10
ответ дан 28 November 2019 в 06:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: