Как я могу получить список визуально отличных цветов?

Мне нужно назначить цвета, чтобы различать разные предметы. Простой случай: заказывайте ряды другого цвета по желанию заказчика.

Я не хочу, чтобы пользователь выбирал цвет для каждого клиента, я хочу делать это во время выполнения.

Если есть один покупатель, я буду использовать «красный», если есть два «красный» и «белый», ...

Конечно, я могу создать свою GimmeRandomColour(i: index) собственную функцию, которая использует i и RGB функцию для создания хороших случайных цветов (но в этом случае создание хороших цветов может быть непростым). Или я могу сказать, что если i равно 0, дайте мне clRed, ... (таким образом создание большого количества цветов может быть проблемой).

Как мне получить «хороший список цветов» с приемлемым уровнем контрастности?


person LaBracca    schedule 24.03.2011    source источник
comment
Не из коробки. Это слишком специфично, чтобы предоставлять встроенную функцию.   -  person Marcelo Cantos    schedule 24.03.2011
comment
Создайте свою собственную палитру и используйте случайную выборку без замены.   -  person David Heffernan    schedule 24.03.2011


Ответы (2)


В Delphi нет встроенной функции. См. Этот вопрос, чтобы узнать о способах создания приятных цветовых схем.

Алгоритм случайного создания эстетически приятной цветовой палитры

person HMcG    schedule 24.03.2011
comment
Хорошая ссылка, но, как я написал в конце своего вопроса, случайный выбор неверен. Мне нужен всегда один и тот же цвет для заданного значения i. SO Примерно как случай i из 0 Результат: = clRed; 1 Результат: = clBlue; 2 ... но я хочу что-то, что имеет смысл также для i = 100, даже если реально я буду использовать это для i ‹50. Конечно, я могу закодировать 50 цветов, поэтому я уверен, что это будет работать нормально. - person LaBracca; 24.03.2011
comment
@ user193655 Чтобы всегда получать одно и то же значение для данного I, для каждого другого я использую случайный предложенный алгоритм для генерации нового цвета и связывания этого цвета с этим конкретным I, чтобы вы могли получить тот же цвет с последующими вызовами getColorFor (I) . Если вы хотите получить один и тот же цвет для разных запусков программы, сохраните привязку I = ColorValue в базе данных, реестре, Ini или файле конфигурации. - person jachguate; 24.03.2011
comment
@ user193655 - (в настоящее время) 6-й ответ на этот вопрос дает ссылку на статью о генерации цветов с использованием «золотого угла». martin.ankerl.com/2009/12 / 09 / - person HMcG; 24.03.2011

Обычный подход - использовать значения $ 00, 33, $ 66, $ 99, $ CC и $ FF (Random(6) * $33) для каждого компонента цвета RGB.

В результате получится 216 различных цветов, которые безопасны в использовании.

См. Примеры в википедии.

person Jørn E. Angeltveit    schedule 24.03.2011
comment
Вы имеете в виду для каждого компонента RGB. - person Andreas Rejbrand; 24.03.2011
comment
@Andreas, я изначально имел в виду каждый красный, зеленый и синий цвет, но сократил его, не увидев нового значения :) Компонент, тем не менее, более точный термин. - person Jørn E. Angeltveit; 24.03.2011