Здесь приведен список значений RGB, соответствующих цветам нити DM C: http://my.crazyartzone.com/dmc.asp. Есть также список, встроенный в исходный код найденной вами веб-страницы (и он другой). Вы можете увидеть этот список по этому адресу: http://www.damaniel.info/dmc/dmctorgb.js.
Почему они разные? Существуют разные стандарты для RGB. Самый распространенный из них теперь называется sRGB (для «Стандартного RGB»). Они могут использовать разные стандарты. Или, может быть, они получают свои цвета из разных источников. В любом случае они приблизительны: цвет нити различен. Так что просто выберите один.
Тогда вам нужно взять значение RGB и найти ближайшее значение в одном из этих списков.
Это не тривиально, потому что определение " Ближайший "сложно. Похоже, что эта веб-страница использует евклидово расстояние в пространстве RGB, но это пространство далеко не однородно для восприятия. Так что, вероятно, лучше всего преобразовать и ваш входной цвет RGB, и таблицу цветов нити в другое представление, где равные расстояния воспринимаются одинаково. Я думаю, что пространство LAB (см. ?colorspace::LAB
), вероятно, является хорошим выбором для этого, но я не знаю, лучше ли оно. Прочитайте http://colorspace.r-forge.r-project.org/articles/color_spaces.html, если хотите углубиться в детали.
Итак, вот что вам нужно сделать:
- Загрузить версию одной из этих таблиц в кадр данных.
- Преобразуйте все значения RGB там в значения LAB и добавьте их в кадр данных.
- Напишите функцию для преобразования входного значения RGB в LAB.
- Найдите ближайшую запись LAB в кадре данных для требуемого значения LAB и выведите соответствующий номер нити.
РЕДАКТИРОВАНИЕ ДОБАВЛЕНО: Пока я писал, @dcruvolo указал на симпатичный dmc
пакет. Так что используйте это! (Возможно, вы хотите изменить способ определения расстояния; вам действительно не нужно евклидово расстояние по умолчанию в пространстве RGB.)