我正在研究壓縮算法。我正在讀取8位/像素的圖像文件,我想將這8位值壓縮成4位以便壓縮。我希望對位進行一些有用的瞭解用Java打包,我該如何解決這個問題?我不需要一個工作解決方案。只是指導。Java中的位封裝
在此先感謝
我正在研究壓縮算法。我正在讀取8位/像素的圖像文件,我想將這8位值壓縮成4位以便壓縮。我希望對位進行一些有用的瞭解用Java打包,我該如何解決這個問題?我不需要一個工作解決方案。只是指導。Java中的位封裝
在此先感謝
Java有運算符來測試/操縱數字的位。看看這個:
Bitwise and Bit Shift Operators
如果你需要處理的比特金額較大,還有的Bitset
類。
基本上你所需要的僅僅是按位運算符來測試/操縱byte
或int
類型的變量位。
你的壓縮例程可以如下所示:
void compress(byte[] pic, byte[] picCompressed) {
boolean odd = false;
int pos = 0;
for (byte p : pic)
{
byte b = quantize(p);
if (odd) {
picCompressed[pos++] |= (byte)(b << 4);
} else {
picCompressed[pos] = b;
}
odd = !odd;
}
}
原始數組在循環中運行。通過交替變量odd
控制,壓縮的4位填充到壓縮數組中的字節位置的上半部分或下半部分。
簡單化量化例程只是忽略低4位:
byte quantize(byte p) {
return (byte)((p >> 4) & 0x0F);
}
在實踐中,量化是不均勻的和經常使用的查找表來實現。您可以使用一個256字節的數組爲每個可能的字節值分配一個目標值。
你的實際壓縮算法是什麼? – harold 2014-11-04 08:53:31
@harold我將使用量化。統一量化 – Shehlina 2014-11-04 08:54:44
好吧,這是有道理的,那麼只是從這些4位的東西(帶成對,結合'(a << 4)| b')的字節,發送字節 – harold 2014-11-04 08:55:56