forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Библиотеки (http://forum.boolean.name/forumdisplay.php?f=124)
-   -   "Кодирование/декодирование изображений", или "Давайте попробуем скрыть ресурсы мидлетов" (http://forum.boolean.name/showthread.php?t=8283)

@llien 20.05.2009 09:11

Ответ: "Кодирование/декодирование изображений", или "Давайте попробуем скрыть ресурсы мидлетов"
 
Люди а как у фишлаба!
давайте также секлаб написал компилер\декомпилер осталось только переписать в либу и все готово!
кстати с аннимоном поговорите на эту тему! он чнибудь придумает!

@llien 27.05.2009 11:43

Ответ: "Кодирование/декодирование изображений", или "Давайте попробуем скрыть ресурсы мидлетов"
 
Я вообще тут кому ору
:wild: :wild: :wild: :wild: :wild: :wild:???????????????????????
?????????????????????????
???????????????????????????????????

Richik 03.06.2009 14:18

Ответ: "Кодирование/декодирование изображений", или "Давайте попробуем скрыть ресурсы мидлетов"
 
Пробовал открывать png в блокноте, удалял заголовок и картинка становилась белой. После возврата заголовка, картинка оставалась белой..
А в ДОС - эмуляторе все было нормально. При удалении заголовка картинка становилась белой, при восстановлении его, картинка опять становилась прежней..
Тут вероятно проблема в кодировки символов..

Нашел описание Чтение PNG и алгоритм декодирования:

PHP код:

ДЕЛАТЬ
   прочитать заголовок блока
.
   
ЕСЛИ тип сжатия 00 (без сжатия)
      
перейти к началу следующего байта
      прочитать 2 байта с длиной блока 
(LEN) и ещё два байта (дополнение, не используется)
      
передать LEN байтов входных данных на выход
   ИНАЧЕ
      ЕСЛИ тип сжатия 10 
(с динамическими кодами Хаффмана)
         
прочитать из входных данных информацию для построения кодов длин и кодов расстояний
         
(см. раздел 3.2.7. "Compression with dynamic Huffman codes" RFC 1951,
         
а также функцию ReadLengths)
      
ДЕЛАТЬ
         прочитать очередной код Хаффмана и декодировать его в value
         
(см. выше, каким именно образом читаются коды Хаффмана;
          
необходимо учитывать также, что код имеет переменную длину)
         
ЕСЛИ value < 256
            передать значение value на выход
         ИНАЧЕ
            ЕСЛИ value 
= 256 (конец блока)
               
выйти из цикла
            ИНАЧЕ 
(т.е. value = 257..285, )
               
length = value
               
(согласно разделу 2. "Compressed representation overview" RFC 1951,
                
алфавит одинаков для значений (value<256) и длин (value>256))

               
посмотреть в таблицу 1 раздела 3.2.5. "Compressed blocks (length and distance codes)" RFC 1951
               прочитать нужное количество дополнительных битов и скорректировать length
               
(см. выше, каким именно образом читаются данные, не являющиеся кодами Хаффмана)

               
прочитать код Хаффмана для расстояния и декодировать его в distance
               
(см. выше, каким именно образом читаются коды Хаффмана)
               
посмотреть в таблицу 2 раздела 3.2.5. "Compressed blocks (length and distance codes)" RFC 1951
               прочитать нужное количество дополнительных битов и скорректировать distance
               
(см. выше, каким именно образом читаются данные, не являющиеся кодами Хаффмана)

               
отступить в уже декодированных данных distance байтов
               и скопировать length байтов на выход
.
               (
если lentgh>distance, надо скопировать несколько раз)
      
ПОКА не конец блока
ПОКА не последний блок 


Надо заняться, но в последнее время что-то не получается (Драсте-драсте, как дела?, пиво - водка и пока :crazy: )


Часовой пояс GMT +4, время: 09:19.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Перевод: zCarot