Перетворення hsv в rgb, embedder - s life

Все почалося з цього міксу:

Слухаючи його, я зрозумів, що мені потрібен новий контролер для RGB-світлодіодної стрічки. Подібні штуки, якщо хтось пам'ятає, мною вже делалался, однак чесного перетворення HSV -> RGB там не було - замість нього використовувався простий перебір квітів по Hue. Тепер же прийшло усвідомлення того, що мені конче необхідно чесне перетворення з усіх трьох компонент. 🙂

Я пішов гуглити, і не сказати, щоб мої пошуки були зовсім марні - я знайшов і формули, і деяка кількість реалізацій. Проблема полягала лише в тому, що і формули, і реалізації розраховані на плаваючу точку, а мене, зрозуміло, цікавила целочисленная арифметика. Реалізації в цілих числах, яка мене б влаштувала, я так і не знайшов.

Загалом, хочеш, щоб щось було зроблено добре - зроби це сам. Спочатку я хотів перетворити формулу. додавши в неї відповідні масштабуючі коефіцієнти, однак, промучившись деякий час, я плюнув на це заняття і просто переписав вихідну формулу на чесній фіксованій точці.

Нижче викладені листинги hsv2rgb.h і hsv2rgb.c - мені лінь завантажувати їх архівом.

Модуль містить як целочисленную (з фіксованою крапкою) реалізацію, так і реалізацію з плаваючою точкою. Їх компіляція включається незалежно відповідними дефайнамі. Бонусом йде власне реалізація операцій з фіксованою точкою.

fp_HSV2RGB (...) - реалізація з плаваючою точкою.

fxp_HSV2RGB (...) - реалізація з фіксованою точкою.

hsv2rgb.h:

Схожі статті