Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Сжатая графика во флешке
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Gemm
Используем флешку для хранения картинок. Картинки - битмапки в 16 битном формате. Очень расточительно хранить несжатыми во флешке. Хотелось бы расжимать и класть в SDRAM (благо ее полно) на этапе инициализации.

Если кто подобное делал - посоветуйте, пожалуйста, быстренький простенький алгоритм без потери качества для реализации на АРМе.

Спасибо.
deadman
Цитата(Gemm @ Sep 20 2007, 09:53) *
... быстренький, простенький алгоритм без потери качества ...


Как говорится, выберите любые два пункта... sad.gif
Gemm
Цитата(deadman @ Sep 20 2007, 10:13) *
Как говорится, выберите любые два пункта... sad.gif


Ну вот я и выбрал smile.gif . Про степень сжатия молчу...
aaarrr
Цитата(Gemm @ Sep 20 2007, 10:16) *
Ну вот я и выбрал smile.gif . Про степень сжатия молчу...

Тогда реализуйте RLE - пишется за пару часов, работает быстро.
Впрочем, на распаковке LZ тоже имеет хорошую скорость.
proba
Нажмите для просмотра прикрепленного файлаиспользую lzw , даже на avr . вот пакет с всем необходимым.
aaarrr
И еще три варианта LZ (SS, Хаффман и арифметическое сжатие). Нажмите для просмотра прикрепленного файла
Gemm
Цитата(aaarrr @ Sep 20 2007, 10:59) *
И еще три варианта LZ (SS, Хаффман и арифметическое сжатие). Нажмите для просмотра прикрепленного файла


А как с этим работать? fseek(...), fwrite(...), getc(infile)... Файловой системы нету, есть просто массив данных в памяти. Много переписывать в ваших исходниках. Или можно сделать проще? Компилятор использую IAR.
aaarrr
Цитата(Gemm @ Sep 20 2007, 15:13) *
А как с этим работать?

Наверное, "творчески переработать". Неужели стандартные функции ввода-вывода вызывают такие проблемы? Много переписывать это не аргумент - и так все на блюдечке.
KAlex
Цитата(proba @ Sep 20 2007, 10:48) *
Нажмите для просмотра прикрепленного файлаиспользую lzw , даже на avr . вот пакет с всем необходимым.


Прогнал через компрессор BMP 256х256, было 64К стало 74.
После декомпрессии файл отличается от исходного и не видится Paint-ом.
И кому нужны такие исходники.
КСПшник
Цитата(aaarrr @ Sep 20 2007, 10:24) *
Тогда реализуйте RLE - пишется за пару часов, работает быстро.
Впрочем, на распаковке LZ тоже имеет хорошую скорость.


Точно... А еще поработать в хорошем графическом редакторе над сокрашением количества цветов в палитре... Тогда можно и не 16 бит пользовать, а, скажем 8...
proba
Цитата(KAlex @ Sep 20 2007, 14:32) *
Прогнал через компрессор BMP 256х256, было 64К стало 74.
После декомпрессии файл отличается от исходного и не видится Paint-ом.
И кому нужны такие исходники.

да, не прочитал полностю задачу, данныи алгоритм работает на текстах- но во всяком случае у меня проблем небыло. видимо библиотечныи подход исползованныи там для графики не годится.
aaarrr
Цитата(proba @ Sep 20 2007, 20:03) *
видимо библиотечныи подход исползованныи там для графики не годится.

Для графики годится - LZW используется в GIF'ах, для фотографий - увы, нет.
scifi
Сначала скажите, какого рода картинки предполагается сжимать. Потом, возможно, придётся решить, можно ли сжимать с потерями.
VAI
кстати, в μC/GUI есть поддержка jpg.
Ищется в гугле по ключевым словам "uC-GUI" "uCGUI" "uC/GUI" "μC/GUI"
Gemm
Цитата(scifi @ Sep 20 2007, 22:22) *
Сначала скажите, какого рода картинки предполагается сжимать. Потом, возможно, придётся решить, можно ли сжимать с потерями.

Картинки должны хорошо сжиматься без всяких потерь. Там черный фон, на котором красиво, с полутонами и анимацией (последовательность битмапок) написаны сообщения об ошибках и т.п. Т.е. 80% - это два цвета. Я попробовал сжать rar-ом с самой маленькой степенью сжатия. Сжалось в 15 раз.
deadman
Если битмапы одинаковых размеров, и, как было указано, имеют на 80% два цвета.

на PC:
-объединить их в один массив
-пройтись по нему статическим алгоритмом Хаффмена
-получаем словарь и сжатый массив

на МК:
- по словарю и сжатому массиву восстанавливаем исходный массив в память
- по известным параметрам битмапов вычленяем их из массива по необходимости

Ссылка на исходники и прочее: http://webcenter.ru/~xander/

Или в архиве.
KAlex
Цитата(Gemm @ Sep 21 2007, 10:36) *
80% - это два цвета.

Тогда адаптированный Хафман.
ОднознАчно (с)
deadman
Цитата(KAlex @ Sep 21 2007, 12:08) *
Тогда адаптированный Хафман.
ОднознАчно (с)


А можно и пару раз Хафманом пройти... smile.gif
Тестовый рисунок ужался с 400к до 59к, потом 59к до 19к.
Итого в два прохода - 20 раз. И без RAR.

Для рисунков - самое оно...

P.S. Сорри, RAR до 3к ужал... sad.gif
Gemm
Цитата(deadman @ Sep 21 2007, 11:45) *
skipped

Ссылка на исходники и прочее: http://webcenter.ru/~xander/

Или в архиве.



Попробовал зажать экзешником, что лежит в архиве. Сжало чуть-чуть получше, чем в 2 раза. Не совсем приемлимо - zip жмет в 13 раз. Смотрю в сторону гнушных gzip'а и bzip2.
deadman
Братта, смотри мой мессадж выше.
Можно пару раз пройтись. Универсальный не нужен ведь?
Попробуй с готовым exe на своей картинке.
Здесь довольно узкая задача. smile.gif
Не спорю, что на ПиСи есть и получше архиваторы.
Они таки используют много методов.
Но на ЭмСи есть проблема - эффективность архиватора/размер кода архиватора.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.