Альфа-данные формата сжатия DXT3 (BC2)

Я пытаюсь прочитать информацию об изображении из файла ддс. Мне удалось заставить работать форматы DXT1 и DXT5, однако у меня есть вопрос, касающийся альфа-данных формата DXT3 (также известный как BC2).
При взгляде на макет сжатый Блок BC2, он показывает, что альфа-данные для 16-пиксельного блока хранятся в первых 8 байтах данных, причем каждое значение занимает 4 бита.

Означает ли это, что, поскольку сохраненное альфа-значение может быть только 0-15, фактические альфа-данные рассчитываются следующим образом:

unsigned char bitvalue = GetAlphaBitValue(); // assume this works and gets the 4-bit value i am looking for
unsigned char alpha = (bitvalue / 15.0f) * 255;

Это правильно, или я смотрю на это неправильно?

0

Решение

Это то что эта спецификация кажется, говорит:

Альфа-компонент для текселя в местоположении (x, y) в блоке
задается альфа (х, у) / 15.

Потому что результат должен быть в [0 .. 1], а не [0 .. 255].

Поскольку 255 делится на 15, вероятно, легче представить преобразование в [0 .. 255] как

uint8_t alpha = bitvalue * 17;

Теперь стало более очевидным, что происходит обычное отображение «дублирования» (как, например, короткие цветовые коды CSS), которое обеспечивает хорошее распределение выходных значений (позволяет кодировать как минимальные, так и максимальные значения, и имеет равные шаги между всеми значениями).

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]