Название: Автоматический выбор цветов Отправлено: DarkHobbit от Декабрь 21, 2014, 18:49 Здравствуйте.
Задача такая. Делается графическая программа на основе QGraphicsView. На графике будет довольно много однотипных элементов, которые хотелось бы различать в том числе по цвету. Чтобы не грузить задачей выбора цвета пользователя, цвет очередному элементу хотелось бы присваивать автоматически. По-видимому, надо сделать базовый набор цветов, заведомо отличающихся от фона, и циклически выдавать их каждому новому элементу по запросу. Нет ли случайно класса для Qt, который автоматизирует эту задачу? Название: Re: Автоматический выбор цветов Отправлено: gil9red от Декабрь 21, 2014, 19:00 Нет.
Название: Re: Автоматический выбор цветов Отправлено: DarkHobbit от Декабрь 21, 2014, 19:15 Спасибо, значит, будем велосипедить...
Название: Мой вариант Отправлено: DarkHobbit от Январь 02, 2015, 18:15 Вот такой велосипед написал:
https://github.com/DarkHobbit/chronoline/blob/master/src/colorautoselector.h https://github.com/DarkHobbit/chronoline/blob/master/src/colorautoselector.cpp (о проекте chronoline, для которого он понадобился, я тоже расскажу, но в отдельной теме). Создание каждого объекта класса ColorAutoSelector даёт относительно независимую очередь цветов. Это нужно, например, если график логически поделён на несколько непересекающихся частей, и между ними уникальность цветов не нужна (а хороших цветов всегда не хватает). Рандомизации нет, поэтому чтобы эти части не выглядели совсем уж уныло, в конструкторе задаётся initialShift - смещение индекса относительно начала массива основных цветов. Очередной цвет возвращается методом nextColor(). Чтобы не напороться на цвет фона или похожий на него, есть понятие зарезервированных цветов. Вызвав, например, addReservedColor(Qt::black), можно исключить чёрный цвет из списка выдаваемых. В классе есть что совершенствовать, например, добавить ту же самую рандомизацию. Цвета, включенные в baseColors, и их порядок - также довольно спорный момент. Можно было бы пытаться при добавлении зарезервированного цвета исключать не только его самого, но и те, которые пользователь визуально может с ним спутать, но тут уже целый ИИ нужен. Есть бага - если покрыть зарезервированными цветами весь baseColors, вызов nextColor() утащит программу в бесконечный цикл. Это в принципе, можно отследить в вызывающей программе (например, в chronoline на данный момент такая ситуация возникать не должна), но пожалуй, стоит добавить проверку в addReservedColor. Подумаю. Название: Re: Автоматический выбор цветов Отправлено: Igors от Январь 03, 2015, 09:37 Если что-то простое (без ColorPicker'ов) можно так
Код
Название: Re: Автоматический выбор цветов Отправлено: DarkHobbit от Январь 03, 2015, 20:30 Что-то у меня при таком методе цвета очень быстро скатились к жёлтому и начали повторяться (начинал последовательность с Qt::red). Возможно, это зависит от того, какой цвет взять начальным...
Название: Re: Автоматический выбор цветов Отправлено: Igors от Январь 04, 2015, 08:56 Что-то у меня при таком методе цвета очень быстро скатились к жёлтому и начали повторяться (начинал последовательность с Qt::red). Возможно, это зависит от того, какой цвет взять начальным... У меня ничего не скатилось (аттач). А повторяться будет все. Если нужно больше цветов - модифицировать value (тоже в HSV модели). Мысль назначить цвета по умолчанию здравая, но особо упорствовать/раздувать ее не стоит, в любом случае юзверь должен иметь возможность назначить цвет сам - если захочет. Название: Re: Автоматический выбор цветов Отправлено: DarkHobbit от Январь 04, 2015, 23:59 Ага, вижу.
Тоже вариант, правда, мне не очень при этом понравилось, что соседние цвета - они и по цвету соседние. Я свой массив подбирал так, чтобы соседние цвета как раз различались. Насколько это получилось - судить не мне. Цитировать Мысль назначить цвета по умолчанию здравая, но особо упорствовать/раздувать ее не стоит, в любом случае юзверь должен иметь возможность назначить цвет сам - если захочет. Да, разумеется, в библиотеке, которая мой класс вызывает, я предусмотрел оба варианта.Название: Re: Автоматический выбор цветов Отправлено: Igors от Январь 05, 2015, 09:08 правда, мне не очень при этом понравилось, что соседние цвета - они и по цвету соседние. Тогда напр такКод
|