首先,我很抱歉如果這是重複的;但我的Google-fu似乎在今天讓我失望。將兩個字節合併爲一個
我正在爲Photoshop編寫一個圖像格式模塊,並且此格式的保存選項之一包含一個4位Alpha通道。當然,我必須轉換的數據是8位/ 1字節的阿爾法 - 所以我需要基本上採用阿爾法的每兩個字節,併合併成一個。
我嘗試(見下文),相信具有改進很大的空間:
,其分別包含8位alpha數據和4位alpha數據,for(int x=0,w=0;x < alphaData.size();x+=2,w++)
{
short ashort=(alphaData[x] << 8)+alphaData[x+1];
alphaFinal[w]=(unsigned char)ashort;
}
alphaData和alphaFinal是矢量。我意識到將兩個字節減少到一個值必然會導致「分辨率」的損失,但我不禁想到有更好的方法來做到這一點。
對於額外的信息,下面的做相反的迴路(從格式轉換4位alpha到8位的Photoshop)
alphaData服務於相同的目的的上方,並且imgData是一個無符號的字符向量保存原始圖像數據。 (alpha的數據格式的這個變體的圖像的實際RGB數據之後上漲了)
for(int b=alphaOffset,x2=0;b < (alphaOffset+dataLength); b++,x2+=2)
{
unsigned char lo = (imgData[b] & 15);
unsigned char hi = ((imgData[b] >> 4) & 15);
alphaData[x2]=lo*17;
alphaData[x2+1]=hi*17;
}
+1僅用於Google-Fu文字遊戲。 – WhozCraig