Альфа-данные формата сжатия 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;
Это правильно, или я смотрю на это неправильно?
1 ответ
Вот что эта спецификация, кажется, говорит:
Альфа-компонент для текселя в местоположении (x,y) в блоке
задается альфа (х, у) / 15.
Потому что результат должен быть в [0 .. 1], а не [0 .. 255].
Поскольку 255 делится на 15, вероятно, легче представить преобразование в [0.. 255] как
uint8_t alpha = bitvalue * 17;
Теперь стало более очевидным, что происходит обычное отображение "дублирования" (как, например, короткие цветовые коды CSS), которое обеспечивает хорошее распределение выходных значений (позволяет кодировать как минимальные, так и максимальные значения, и имеет равные шаги между всеми значениями).