2016-12-06 26 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]であるはずです。

uint8_t alpha = bitvalue * 17; 

として

255は15で割り切れるので、への変換を考えるのは、おそらく簡単です[0 .. 255]何が起こっているのはいつもの「複製」のマッピングであることを、今より明白です(最小値と最大値の両方を符号化することができ、すべての値の間に等しいステップを持つ)出力値の優れた広がりを与える(CSSショートカラーコードのように)

関連する問題