Генерируйте уникальные цвета

Это оказалось проблемой из нескольких частей.

Ответ на первоначальный вопрос заключается в том, что Qt ищет библиотеки в рабочем каталоге (QDir::currentPath()) и в ПУТИ Windows.

Часть 1:

В Windows ошибка specified module could not be found также может означать, что одна из зависимостей mod_spatialite.dll не найдена. В моем случае я забыл переместить эти зависимости в тот же каталог, что и mod_spatialite.dll. Они включают в себя:

  • libgcc_s_dw2-1.dll
  • libstdc ++ - 6.dll
  • libsqlite3-0.dll
  • libxml2-2.dll
  • zlib1.dll
  • libfreexl-1.dll
  • libgeos_c-1.dll
  • libgeos-3-5-0.dll
  • [ 1114] libiconv-2.dll
  • liblzma-5.cll
  • libproj-9.dll

Часть 2:

Библиотеки libgcc_s_dw2-1.dll и libstdc++-6.dll, поставляемые с libspatialite, не работают с Windows 10. Подробнее об этом здесь и здесь . Они будут аварийно завершать программу при загрузке. Для меня исправлением было получить те же библиотеки из моей установки Qt на C: \ Qt \ 5.11.3 \ mingw53_32.

18
задан Brian R. Bondy 21 April 2009 в 16:00
поделиться

5 ответов

Использование цветовой модели RGB не является хорошим способом получить хорошее сочетание цветов. Лучше использовать другую цветовую модель для генерации вашего цвета, а затем преобразовать эту цветовую модель в RGB.

Вместо этого я предлагаю вам цветовую модель HSV или HSL , в частности, вы хотите изменить Hue .

Если вы хотите, чтобы X различало значения цвета, измените их от 0 до 360 с размером шага 360, деленным на X.

13
ответ дан 30 November 2019 в 08:48
поделиться

В общем, RGB не является отличным цветовым пространством для подобных вещей, потому что он воспринимается нелинейно для начинающих. Это означает, что равные расстояния, перемещаемые между RGB-триплетами, не выглядят одинаково на наших глазах.

Я бы, вероятно, работал в пространстве L * c * h * ( см. Также ) пробел, или HSL пробел, и просто генерируем равномерный интервал по оттенку. Эти пространства были разработаны так, чтобы быть приблизительно перцепционно линейными.

4
ответ дан 30 November 2019 в 08:48
поделиться

Какое у вас пространство выборки ... сколько элементов мы говорим.

Вы можете создать массив RGB-троек из

for(int r = 0; r < 255; r = r+16)
   for(int g = 0; g < 255; g = g+16)
      for(int b = 0; b < 255; b = b+16)
           // take r, g, b and add it to a list

, затем рандомизировать свой список и выполнить его. это даст вам 16 ^ 3 (4096) разных цветов перед повторным.

3
ответ дан 30 November 2019 в 08:48
поделиться

Это очень похоже на четырехцветную проблему, связанную с раскрасочными картами, и может дать вам несколько интересных решений:

Теорема о четырех цветах

0
ответ дан 30 November 2019 в 08:48
поделиться

Google "delta e cie 2000"; формула цветового различия полезна для определения видимого (визуального) расстояния между двумя цветами. (На мониторе; есть другая формула для пигментов.) Он работает с цветами в пространстве Lab (реквизит для Саймона), но применяет перцепционный расчет разницы.

Мы обнаружили, что числа около 1,5 было достаточно, чтобы обеспечить визуально отличных цветов (т. Е. Вы можете определить разницу, если они находятся рядом), но если вы хотите идентифицируемых цветов (вы можете найти любой цвет в легенде), вам нужно увеличить его.

Что касается создания набора цветов ... Я бы, вероятно, начал с какого-то угла лабораторного пространства и обошел бы его, используя размер шага, который дает достаточно большие визуальные различия (примечание: он не линейный, поэтому размер шага будет вероятно, должен быть адаптивным), а затем рандомизировать список.

2
ответ дан 30 November 2019 в 08:48
поделиться
Другие вопросы по тегам:

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