2016-12-06 11 views
0

dds 파일에서 이미지 정보를 읽으려고합니다. 나는 DXT1 및 DXT5 형식을 잘 작동하도록 만들었지 만 DXT3 형식의 알파 데이터에 관한 질문이 있습니다 (또한 BC2로 알고 있음). 압축 된 BC2 block의 레이아웃을 보면, 16 비트 블록의 알파 데이터가 데이터의 처음 8 바이트에 저장되고 각 값은 4 비트를 차지한다는 것을 보여줍니다. 다음과 같이 저장 알파 값은 0-15 일 수 있기 때문에 DXT3 (BC2) 압축 형식 알파 데이터

이가, 그 뜻, 실제 알파 데이터가 계산됩니다

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

이 올바른, 아니면 내가 잘못 그것을보고 있어요? this specification 말 것 무엇

답변

0

:

블록의 위치 (x, y) 텍셀의 알파 성분이 알파 (x, y)에 의해 주어진
이다/15

결과가 [0 .. 255]가 아닌 [0 .. 1]에 있어야하기 때문에. 255 이후

은 무슨 일이 일어나고 있는지하는 것은 보통은 "복제"임을 더욱 분명하다

uint8_t alpha = bitvalue * 17; 

로 [0 .. 255]로 변환 생각하는 아마 쉽게, 15로 나누어 매핑 (예 : CSS 단색 코드와 같이) 출력 값이 잘 분산되도록합니다 (최소값과 최대 값을 모두 인코딩 할 수 있으며 모든 값 사이에 동일한 단계가 있음).