#c# #algorithm #gif
#c# #алгоритм #gif
Вопрос:
У меня есть несколько чисел, закодированных в массиве байтов с использованием кода переменной длины. На самом деле это данные изображения GIF89a, которые я должен декодировать.
Поскольку сжатие LZW, используемое для GIF, создает серию кодов переменной длины, от 3 до 12 бит каждый, эти коды должны быть преобразованы в серию из 8-битных байтов, которые будут фактически сохраненными или переданными символами. Коды формируются в поток битов, как если бы они были упакованы справа налево, а затем отбирались по 8 бит за раз для вывода. Предполагая, что массив символов состоит из 8 бит на символ и используя 5-битные коды для упаковки, пример компоновки будет похож на:
---------------
0 | | bbbaaaaa
---------------
1 | | dcccccbb
---------------
2 | | eeeedddd
---------------
3 | | ggfffffe
---------------
4 | | hhhhhggg
---------------
. . .
---------------
N | |
---------------
Как я могу преобразовать его в обычный формат [например, целое число] с помощью c #. Какие-то особенности?
Кроме того, я не могу понять, как распознать, когда размер (в битах) этих чисел увеличивается ( 1 к размеру)? Я просто знаю размер первого числа?
Ответ №1:
Вы хотите использовать поток битов. Смотрите http://www.codeproject.com/KB/cs/bitstream.aspx для наглядного примера.
Комментарии:
1. Спасибо! Это действительно помогло мне! Но, тем не менее, я не могу понять, когда я должен изменить размер кода ( 1)…