Пользовательская реализация DEFLATE для ускорения кодирования PNG - PullRequest
3 голосов
/ 13 июня 2011

Я оптимизирую кодировщик PNG для использования в Flash SWF (но я пишу его в Haxe ).

Мне до сих пор удавалось ускорить процесс, в основном с помощью быстрого чтения / записи в память .

Во время профилирования моего кода я заметил, что около 75% времени тратится на один вызов встроенного во Flash метода compress () , который использует алгоритм zlib (который, в свою очередь, использует DEFLATE ).

Я не слишком суетлив в отношении степени сжатия, но быстрее сжатие было бы потрясающим. Итак, мне было интересно, стоит ли пытаться самостоятельно реализовать zlib / DEFLATE. Небольшой поиск обнаружил исходный код z-реализации C, но это не совсем легкое чтение (или простое портирование!).

Существуют ли какие-либо простые реализации zlib / DEFLATE, которые я мог бы использовать в качестве отправной точки? Я бы предпочел не разбираться со двумя спецификациями , тем более что я не знаю, могла ли бы реализация, работающая в AVM2, работать так же быстро, как собственная Flash в первое место.

Ответы [ 3 ]

3 голосов
/ 13 июня 2011

Я не думаю, что вы сможете добиться лучших результатов с помощью алгоритма, отличного от нативного. Возможно, вы сможете запустить его асинхронно, что может иметь значение. Если вы хотите портировать его, я думаю, что было бы лучше найти реализацию AS3 или JavaScript, например https://github.com/dankogai/js-deflate. Удачи!

3 голосов
/ 13 ноября 2011

В итоге я реализовал deflate / zlib с нуля, и только что выпустил его и кодировщик PNG, построенный поверх него, на GitHub ( README ).Я также написал сообщение в блоге о кодере PNG с тестом , сравнивающим его с другими кодерами.

Реализация сжатия содержится в DeflateStream.hx и выполняетудалось значительно ускорить процесс кодирования (и сделать его полностью асинхронным).

1 голос
/ 13 июня 2011

попробуйте использовать fzip или ascompress

...