|
|
|
Формат GIF. А как код переменной длинны "натягивается" на ЦЕЛОЕ число байт?
|
|||
|---|---|---|---|
|
#18+
Доброе время суток, Господа. Уже всю голову сломал. Просветите, пожалуйста, знающие. Вот ссылка на описание формата: http://www.r-t-f-m.info/_books/15001/index.php#appxF А вот цитата из этого документа: "Поскольку в результате LZW-компрессии, согласно формату GIF, генерируется массив кодов переменной длины - от 3 до 12 бит, то возникает необходимость в преобразовании этого массива в последовательную цепочку байтов, где все 8 бит были бы значащими, и эту последовательность можно было бы реально записать на диск или передать адресату. Попутно осуществляется также дополнительная компрессии графических данных. Для выполнения этой операции коды преобразуются в поток отдельных битов (порядок паковки - справа налево), а затем такой поток делится программой на одинаковые блоки по 8 бит каждый." Вопрос: КАК? Как в общем случае непонятное (т.е. любое) количество БИТ должно в итоге "преобразоваться" в ЦЕЛОЕ КОЛИЧЕСТВО БАЙТ (по 8 бит)??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2015, 21:30 |
|
||
|
Формат GIF. А как код переменной длинны "натягивается" на ЦЕЛОЕ число байт?
|
|||
|---|---|---|---|
|
#18+
Поток бит дополняется с хвоста незначащими битами (чаще всего нулями). У нас самого начала известно сколько бит будет в потоке, поэтому незначащий хвост легко отрезать когда он перестает быть нужным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2015, 23:38 |
|
||
|
Формат GIF. А как код переменной длинны "натягивается" на ЦЕЛОЕ число байт?
|
|||
|---|---|---|---|
|
#18+
White Owl, Да, спасибо за ответ. В принципе так сейчас и пробую... Закодирую последовательность бит, а после дополню ее (битовую последовательность) нулями до целого количества байт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2015, 00:03 |
|
||
|
Формат GIF. А как код переменной длинны "натягивается" на ЦЕЛОЕ число байт?
|
|||
|---|---|---|---|
|
#18+
Нет, не выходит каменный цветок... Может кто покажет "на пальцах": как все-таки работает этот "немного" другой lzw в gif? Вот к примеру. Сделал я в Paint картинку размером 3х1, т.е. три пикселя - красный, зеленый и синий: Код: pascal 1. Далее сохранил я это творение в формате gif. Открыл этот файл в HEX-редакторе, нашел там графический блок и ... Код: pascal 1. 2. Байт номер 1 = 08 - понятно, "начальный размер LZW-кода, равен глубине цвета картинки"; Байт номер 2 = 06 - понятно, "размер субблока данных, не включая сам байт"; Байт номер 9 = 00 - понятно, "терминатор блока"; Байт номер 10 = 3B - понятно, "конец файла"; Но, абхр!, что же там между ними - байты с 03 по 08? Как биты трех исходных пикселей располагаются там? Для этого файла Paint создал также глобальную палитру (768 байт = 256*3). Индексы трех исходных цветов в этой палитре соответственно 9, 10 и 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2015, 15:11 |
|
||
|
Формат GIF. А как код переменной длинны "натягивается" на ЦЕЛОЕ число байт?
|
|||
|---|---|---|---|
|
#18+
А откуда сведения что номера в палитре 9, 10 и 12? Я смотрю на последовательность и вижу первых 3 пикселя с такими индексами: 1, 228, 203. Остальное непонятный хлам. вообще для палитры 256 цветов 3 пикселя достаточно - 9*3 = 27 бит, что после округления = 4 байтам, непонятно зачем mspaint сделал 6 байт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2015, 17:34 |
|
||
|
Формат GIF. А как код переменной длинны "натягивается" на ЦЕЛОЕ число байт?
|
|||
|---|---|---|---|
|
#18+
Я поверхностно пытался разобраться с форматом анимации gif89. В частности у меня был вопрос - возможно или нет кодировать "спрайт" и отдельно внутри gif-файла его анимацию. Траекторию движения (шахматные фигурки на доске) и привязки к точкам времени. Поскольку документ-спецификация был нудный как понедельник, я взял статью на хабре. http://habrahabr.ru/post/127083/ и по ее мотивам воспроизвёл пример. Кое-где скопи-пастил каменты с хабра. Кое-где добавил свои и добавил некоторые константы со спецификаций. Получилось или - нет ХЗ. Скорее - нет поскольку анимация шахмат еще не реализована да и сам сериализатор не иммеет никакого внятного интерфейса создания custom изображений. Его еще пилить и пилить. Почему я не взял готовый продукт - для рендеринга из gif4j. ХЗ. Возможно мне мешала лицензия. А другие библиотеки не имели поддержки анимации. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2015, 13:57 |
|
||
|
|

start [/forum/topic.php?fid=16&fpage=37&tid=1341048]: |
0ms |
get settings: |
5ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
45ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
28ms |
get tp. blocked users: |
1ms |
| others: | 202ms |
| total: | 304ms |

| 0 / 0 |
