http://giflib.sourceforge.net/whatsinagif/lzw_image_data.html노력 LZW 압축
나는 노력의 LZW 압축을 이해하기 위해이 페이지를 읽고 있었다. 그것의 샘플 이미지로부터 인코딩 코드를 나타낸다 : 가변 길이를 바이트로 압축 한 후
# 4 # 1 # 6 # 6 # 2 # 9 # 9 ..
을가된다 :
8C 2D 99 ..
의미 :
# 4 - 3 비트
# 1 - 3 비트
# 6 - 3 비트
# 6 - 3 비트
# 2 - 4 비트
# 9 - 난 기후 샘플 생성 된 4 비트
이 압축 화상 데이터는 정확 Photoshop을 사용하여 이미지를 확인하고 바이너리 내용을 확인했습니다. 출력 코드 # 그러나이
는,이 때
그것은 분명히 비트 크기의 증가를 보여줍니다 발생 방법 비트 크기 증가에 대한 페이지 회담 : When you are encoding the data, you increase your code size as soon as your write out the code equal to 2^(current code size)-1
Jumping back to our sample image, we see that we have a minimum code size value of 2 which means out first code size will be 3 bits long. Out first three codes, #1 #6 and #6, would be coded as 001 110 and 110. If you see at Step 6 of the encoding, we added a code of #7 to our code table. This is our clue to increase our code size because 7 is equal to 2^3-1 (where 3 is our current code size). Thus, the next code we write out, #2, will use the new code size of 4 and therefore look like 0010.
그러나 그 인코딩 테이블에서 6 단계는 항목 # 7이 LZW 사전에 추가되지만 출력을 위해 추가 된 코드는 첫 번째 # 6입니다. 알고리즘에 따르면, 두 # 6은 각각 4 비트가되어야하지만 실제로 어떻게 3 비트입니까? 이 페이지 https://www.eecis.udel.edu/~amer/CISC651/lzw.and.gif.explained.html
는 비트 크기에 대한 같은 일이 그렇게 잘못된 것입니다 If you're encoding, you start with a compression size of (N+1) bits, and, whenever you output the code (2**(compression size)-1), you bump the compression size up one bit
말한다에 따라
?
빌드되는 실제 코드 테이블을 보지 않고 예제를 따라하기는 어렵지만 다음 코드를 출력하여 현재 너비를 오버플로 할 수있는 기회가 생기면 코드 폭을 늘려야합니다. 더 일찍.따라서 설명이 필요하다고 말한 곳에 너비가 증가하지 않지만 압축이 여전히 작동하면 알고리즘에 새 코드가 추가되었는지 (즉 현재 너비가 오버플로되어 있음) 감지 할 수있는 논리가 있어야하기 때문입니다. 출력 스트림에서 아직 발생합니다. –