Преобразование температуры в цвет
- Войдите на сайт для отправки комментариев
Втр, 12/10/2021 - 11:31
делаю термометр на базе MLX90614 с выводом температуры на дисплей в виде цвета. Диапазон измерения от -30 до +50. Примерно -30 это темно синий, а +50 это темно красный. Градация - чем меньше, тем лучше.
Вопрос: как преобразовать температуру в цвет, если цвет выводится HEX значением из трех компонентов RGB, т.е. например белый это FFFFFF, красный FF0000. Пока в голове только вариант с кучей swith - case, но может есть способ проще?
Это делается в шкале HSV.
Это можно делать в шкале HSV, это можно делать непосредственным цветовым клином как у Upper'а, это можно делать еще 100500 способами.
Вопрос лишь в том, который из этих 100500 способов интересует ТС.
(из точки (0,0,255) в точку (255,0,0) можно пройти почти бесконечным количеством траекторий. А если разрешить циклы - то и совсем бесконечным)
но может есть способ проще?
цвет в шкале HSV - это прямая от красного до красного через все цвета
но может есть способ проще?
цвет в шкале HSV - это прямая от красного до красного через все цвета
Нужно не от красного до красного, а от синего до красного. Если S=const и V=const, то сделать это можно двумя способами: через фиолетовый (как предложил Upper) и через зеленый (как, вероятнее всего, подразумевал rkit).
Нашел либу ColorConverterLib которая занимается преобразованием HSV - RGB
Только она работать отказывается, даже пример который с нею идет, выдает
Погуглил, имя либы изменилось с RGB на ColorConverter, но переименование не помогает. В имени файла библиотеки Color, в тексте файла RGB, муть какая то. Нашел у Гайвера алгоритм перевода
буду пробовать...
Ezheka - сколько вам градаций цвета надо? Может проще заранее палитру создать?
В fastled есть все возможные и невозможные инструменты для работы с цветом.
Мне нужно чтобы разница в 0,5 градуса в температуре уже была различима на экране.
Вот получил я нужный цвет в трех разных цифрах - r,g,b, как мне его склеить в формат HEX? Преобразовать из десятичного в 16, потом в строку и строку склеить?
А у Вас какая глубина цвета? 16-разрядная? 18-разрядная? 24-разрядная?
PS. Посмотрел в исходном сообщении, там 24. Тогда просто каждый цвет переводится независимо от других в свой байт (кроме старшего) четырехбайтового числа.
В общем, что HSV, что колесо цветов дает очень грубое преобразование, неинформативное. +20 и +23 градуса визуально не отличаются. Скорее всего надо все данные писать в массив, вычислять минимум и максимум и раскидывать результаты по всей цветовой шкале.
В общем, что HSV, что колесо цветов дает очень грубое преобразование, неинформативное. +20 и +23 градуса визуально не отличаются.
Ну и кто мешает сделать +20 синим, а +23 красным? Будут очень даже сильно различаться.
Могу посоветовать формировать каждый цвет при помощи ДПСЧ, тогда два соседних цвета практически наверняка будет заметно различаться.
В общем, что HSV, что колесо цветов дает очень грубое преобразование, неинформативное. +20 и +23 градуса визуально не отличаются. Скорее всего надо все данные писать в массив, вычислять минимум и максимум и раскидывать результаты по всей цветовой шкале.
Ну -30 - +50 это всего 81 цвет если шаг в 1 градус. Попробуй просто руками выбрать цвета чтобы визуально отличались и запихни в массив.
как сохранить в массив цвета в nex? Записываю красный 0xff0000 он выдает его как синий.
Может надо байты местами поменять ?
как сохранить в массив цвета в nex? Записываю красный 0xff0000 он выдает его как синий.
кроме формата RGB бывает еще GRB, BRG... и так далее - все 6 комбинаций. Если у вас 0xff0000 - не красный. значит у вас не RGB
чо вы гадаете, кода то нет. я вот думаю, у него переменная не того типа.
В общем, в описании к библиотеке имеющаяся ссылка на цвета неверная, цвета описываются форматом
поэтому у меня половина цветов и плывет, только синий совпадает.
Это, я так понимаю, 16 бит глубина. Понять бы еще как ею управлять.
Это, я так понимаю, 16 бит глубина. Понять бы еще как ею управлять.
Скорее всего формат Color565 - то есть Red - 5 бит, Green- 6 бит, Blue - 5 бит
Переводится в 24 бита и обратно элементарно битовыми сдвигами
Ну или можете в инете готовую функцию найти, перевод из 565 в 888 есть почти в любой графической библиотеке, даже в моей для RGB матриц есть :)
эээ, нельзя ли пример или ссылку? Не у всех тут есть опыт в сдвигании бит ))
эээ, нельзя ли пример или ссылку? Не у всех тут есть опыт в сдвигании бит ))
вам в какую сторону надо? Вот 888 -> 565
сорри, просьба дубль выше стереть
Воть как склеивают в NEX из RGB
как это переделать в 16 бит?
А, вижу пример, пробую
Все пошло, спасибо преогромное!
как сохранить в массив цвета в nex? Записываю красный 0xff0000 он выдает его как синий.
кроме формата RGB бывает еще GRB, BRG... и так далее - все 6 комбинаций. Если у вас 0xff0000 - не красный. значит у вас не RGB
BGR.
Честно говоря, других комбинаций кроме RGB и BGR не встречал, но это не значит, что их не может быть.