Вещественное число в цвет RGB.
--------------------------------------------------------------------------
Если просто скопировать значения байтов вещественого, числа в байты каналов RGB цвета начиная с младших, то ничего
хорошего не получится, дело в том, что у вещ. числа и целая часть и дробная меняются в широких пределах - поэтому
мантиса и характеристика числа меняются как попало - поэтому если просто копировать, получается разноцветная пакость какая-то...
А обязательно вещественное? Откуда ты ее берешь?
--------------------------------------------------------------------------
Если просто скопировать значения байтов вещественого, числа в байты каналов RGB цвета начиная с младших, то ничего
хорошего не получится, дело в том, что у вещ. числа и целая часть и дробная меняются в широких пределах - поэтому
мантиса и характеристика числа меняются как попало - поэтому если просто копировать, получается разноцветная пакость какая-то...[/quote]
ГЫ! Так у тебя диапазон вещественного числа формат RGB перекрывает в несколько раз (на RGB 24 бита, а на вещ. одинарной точности - 32 бита). Поэтому значение, переведённое в RGB будет сильно сказываться на изменении цветов. Выделяй только целую часть от вещественного. А можно ещё так:
RGB = Float mod (2^32)-1;
Т.е. взять вещественное число по модулю (2^32)-1.
-------------------------------------
Дело не в том, что перекрывает...
Предположим, что исходные числа лежат в диапазоне от A = 0 до B = 1. Берём некоторый (любой, достаточно насыщенный) цвет, то есть набор чисел (r, g, b) и рассматриваем его как вектор. Тогда для того, чтобы определить необходимый нам цвет для значения X из диапазона от 0 до 1, просто меняем длину вектора, т. е. проводим простейшую операцию: (r * X, g * X, b * X). В таком случае, все составляющие будут изменяться пропорционально и по свойствам RGB представления будет изменяться лишь яркость цвета, но не оттенок. То есть, числу 0 будет соответствовать чёрный цвет, а числу 1 - цвет, взятый нами изначально: (r, g, b). Промежуточным числам будут соответствовать цвета одного оттенка. Для произвольных A и B формула цвета будет выглядеть так: (r * Y, g * Y, b * Y), где Y = (X - A)/(B - A).
ЗЫ. 2 3A3-968M: ХА!!! Нахождение остатка от деления дробного числа на целое - невиданный доселе прорыв в математике. Поздравляю! Да ни один компилятор (даже C) не позволит тебе такое сделать. Можешь смело создавать свою алгебру и назвать её "агебра ЗАЗА", в которой заодно можно будет нацело делить иррациональные числа и складывать комплексные числа с матрицами...
К тому же, число 2^32 не имеет к RGB никакого отношения, поскольку во почти во всех реализациях RGB цвет представляется 16, 24, либо 64 битами, 32 битный цвет - это RGBA, то есть цвет с альфа-каналом. Да только и альфа-канал не имеет никакого отношения к данной задаче, поскольку речь идёт об отображении, а не о смешивании цветов.