Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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;


Наверх

Титульная страница Поиск, карта сайта Написать письмо