![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
4bit -> 8bit [D5, WinXP]
TButton © (2006-06-01 07:11:00)для экономии места храню два байта ( альфу и яркость пиксела) в одном урезая каждый из них до 4х бит (это действительно необходимо, потому что пикселей та ещё туча). урезание происходит безболезненно и быстро путём применения
shr4
градация 0..255 превращается в градацию 0..15
т.е. происходитdiv16
с этим проблем нет
проблемы возникают при возвращении и к градации 0..255
это не критично для яркости, но очень критично для альфы.
потому что то, что было альфой 255 (непрозрачный) при урезании превратилось в 15 (непрозрачный), а после возвращения( shl4) превратилось в 240 (почти непрозрачный)
т.е. техника возврата к оригиналу путём домножения на 16 не подходит
есть вариант решения с использованием чисел с плавающей точкой, но он не подходит ввиду меньшей скорости, а скорость очень критична (ещё раз напомню что пикселей - немеряно)
нужен вариант решения
в двух словах:
максимально быстро
преобразовать число 0..15 в соответствующее 0..255
так, чтобы 0 соответствовал 0, а 15 соответствовало 255
* надеюсь, что вам удастся разобрать мою писанину
** надеюсь, что вы сможете подсказать мне подходящее решение
ecm (2006-06-02 19:30:00) [1]З.Ы
const
Table : Array[0..15] of Byte = (.....
Var0_255 := Table[Var0_15];
ecm (2006-06-02 19:28:00) [2]
> максимально быстро
> преобразовать число 0..15 в соответствующее 0..255
Сделать массив 0..15 и занести туда то что тебе понравится
потом делать преобразование по таблице - быстрее не бывает
:)) » Palladin: » Отнюдь, cм [1]
Cash (2006-06-02 15:29:00) [3]Удалено модератором
Примечание: уже здесь
antonn (2006-06-02 15:17:00) [4]Удалено модератором
Примечание: согласен
Petrovka 38 (2006-06-02 00:35:00) [5]Удалено модератором
Примечание: нехорошее слово
TButton (2006-06-01 10:31:00) [6]вам тоже спасибо, но меня вполне удовлетворил предыдущий ответ =)
Альф (2006-06-01 10:11:00) [7]Немножко дурацкий вариант - но в Вашем случае позволит регулировать еще и кривую (ломаную :) ) для альфы
array [0..15]of byte = (0,... ,255);
TButton (2006-06-01 07:57:00) [8]смешно =)
спасибо.
MBo (2006-06-01 07:50:00) [9]А на 17 умножить не хочешь? ;))
b := b + b shl 4;