У меня есть тривиальный файл RGB, сохраненный как TIFF в Photoshop, 1000 пикселей или около того. Первая строка состоит из 3 пикселей, каждая из которых имеет шестнадцатеричный красный цвет 4B, зеленый цвет B0, 78 синий, а остальная часть строки - белый.LZW Decompress: Почему первый код словаря встречается в полосе 261 TIFF вместо 257, или я неправильно его читаю?
Полоса LZW-закодированы и начальные байты полосы являются:
80 12 D6 07 80 04 16 27 0C В4 А1 Е0 D0 B8 64 36 ... (на самом деле только первый 7 или так байты значимы на мой вопрос)
в 9-битных сегментах это:.
100000000 001001011 010110000 001111000 000000000 100000101 100000110 ... (0x100) (0x4B) (0xB0) (0x78) (0x00) (0x105) (0x106)
Из того, что я понимаю, 256 (0x100) это код сброса, но почему первый расширенный код после что 261 (0x105) вместо 257? Я ожидал бы, что любая запись словаря указывает на то, что она будет парой 4B/B0 для второго пикселя (что вполне может быть), но как бы алгоритм декомпрессии мог установить 4B/B0 на 261 вместо 257? Может кто-нибудь объяснить, что мне здесь не хватает? Может ли быть что-то в другом месте в файле .tif, который будет указывать на это? Огромное спасибо. ~
Кодер LZW всегда генерирует более длинные строки последних символов. Код 0x105 является следующим логическим кодом, который представляет строку из последних 4 символов. Так вы повторяете первый 4-байтовый пиксель. Более низкий код должен быть частичной строкой (менее 4 байтов) или неполным пикселем. – BitBank
@BitBank - спасибо - теперь имеет смысл. Я должен был проработать это дальше ... – regger