2016-12-06 176 views
0

我試圖從dds文件讀取圖像信息。我設法使DXT1和DXT5格式正常工作,但是我有一個關於DXT3格式的alpha數據的問題(也稱爲BC2)。 查看壓縮的BC2 block的佈局時,它顯示16像素塊的阿爾法數據存儲在數據的前8個字節中,每個值佔用4位。DXT3(BC2)壓縮格式alpha數據

這是否意味着,由於存儲alpha值只能是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

這就是this specification似乎是說:

在塊中的位置(x,y)處的紋理像素的阿爾法分量是
由α(X,Y)給定/ 15

因爲結果應該是[0 .. 1],而不是[0 .. 255]。

由於255是由15整除,它可能更容易想到的改造到[0 .. 255]作爲

uint8_t alpha = bitvalue * 17; 

現在更明顯,這是怎麼回事是通常的「複製」映射(就像CSS短顏色代碼一樣),可以很好地擴展輸出值(允許編碼最小值和最大值,並且在所有值之間具有相同的步長)。