User Tag List

Страница 2 из 3 ПерваяПервая 123 ПоследняяПоследняя
Показано с 11 по 20 из 22

Тема: Подскажите хороший упаковщик графики

  1. #11

    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,286
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    91
    Поблагодарили
    39 сообщений
    Mentioned
    8 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Обшибся слегка. Надо перед меткой MCO поставить EX AF,AF' (это я на лету писал). Ну еще можно развернуть цикл и вообще избавиться от этих обменов.

    Цитата Сообщение от TomCaT
    получается, лучше всего пакуются байты 255-0-255-0, или 130-125-130-125, т.е. негатив-позитив-негатив? Разве такие последовательности часто встречаются?
    Если исходное изображение является конверсией по floyd-steinberg, то сжатие будет хреновым (равно как и любым другим пакером), а вот если оно по методу threshold или ordered то все замечательно. Плагин к bge (поставляется в комплекте к qhts или скачивается с сайта http://zxdocs.fatal.ru (раздел projects). В нем можно посмотреть сколько будет весить набор изображений в сжатом и расжатом виде. В среднем в 1.5-2 раза получается выигрыш. И это при достаточно высокой скорости распаковки. Ну и плюс итоговые данные хорошо пакуются хрустом.
    ЗЫ. В videostudio также используется этот метод, он оттуда пришел%))

  2. #12

    Регистрация
    25.06.2005
    Адрес
    Одесса
    Сообщений
    1,821
    Спасибо Благодарностей отдано 
    67
    Спасибо Благодарностей получено 
    74
    Поблагодарили
    31 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    ну, раз работает, значит правильный алгоритм. Хотя я все равно не понимаю, почему просто XOR дает такой выигрыш... и да ладно. Буду пробовать завтра...

    P.S. два EX AF подряд... нельзя ли как-то иначе? Ведь всего только под конец проверить, добрались ли донизу? Надо еще один восьмибитный рег., а в него единицу и RLC ее, тогда и конец определится, и экономия... Может, адрес один в SP положить?
    Последний раз редактировалось TomCaT; 21.09.2006 в 20:20.
    Помни. Только на компьютере можно семь раз Cut, а один - Format. В реале все иначе. (c)
    Власть людей сильнее, чем люди у власти.
    Чем меньше мы смотрим на мир, тем больше задумываемся о нем. (c)

    Скрытый текст

    Can you help Robin in his quest for the silver arrow? (c) Odin "Robin of the Wood"
    Мы все немного режем по дереву, а потом собираем корабли в бутылках.
    Is it the same old story you are going to tell me
    or is it the old story telling me and you we are the same?
    http://www.sky.od.ua/~ptsk
    [свернуть]


  3. #13

    Регистрация
    28.02.2005
    Адрес
    Великий Новгород
    Сообщений
    2,087
    Спасибо Благодарностей отдано 
    10
    Спасибо Благодарностей получено 
    230
    Поблагодарили
    98 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Могу подкинуть ещё пяток способов упаковки, которые используются в AniE наряду с тем, который описал Vitamin. Максимальное сжатие доходит до 64 раз (пустое знакоместо кодируется в 1 бит).
    Все любят гипножабу

  4. #14

    Регистрация
    25.06.2005
    Адрес
    Одесса
    Сообщений
    1,821
    Спасибо Благодарностей отдано 
    67
    Спасибо Благодарностей получено 
    74
    Поблагодарили
    31 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Давайте 8). Только исходники пакдепакеров не по 5 секторов, часом? Потому что все в теме не опубликуешь...

    (я вообще-то думал, что есть под это готовые проги... Надо бы написать какой-то сносный жмакер знакоместного окна, со своим сервисом и минимумом параметров -- окно, м.б. выбор метода и файл -- все что надо, в общем... с пом. одного из местных алгоритмов)
    Последний раз редактировалось TomCaT; 21.09.2006 в 20:25.
    Помни. Только на компьютере можно семь раз Cut, а один - Format. В реале все иначе. (c)
    Власть людей сильнее, чем люди у власти.
    Чем меньше мы смотрим на мир, тем больше задумываемся о нем. (c)

    Скрытый текст

    Can you help Robin in his quest for the silver arrow? (c) Odin "Robin of the Wood"
    Мы все немного режем по дереву, а потом собираем корабли в бутылках.
    Is it the same old story you are going to tell me
    or is it the old story telling me and you we are the same?
    http://www.sky.od.ua/~ptsk
    [свернуть]


  5. #15

    Регистрация
    28.02.2005
    Адрес
    Великий Новгород
    Сообщений
    2,087
    Спасибо Благодарностей отдано 
    10
    Спасибо Благодарностей получено 
    230
    Поблагодарили
    98 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    процедурины для пакрвки-распаковки одного знакоместа
    1.
    Код:
    ; hl - адрес на экране
    ; de - куда пакуем
    
    PACK1	push de
    	inc de
    	ld bc,#8000
    	xor a
    lab_1	cp (hl)
    	jr z,lab_2
    	ld a,(hl)
    	ld (de),a
    	inc de
    	scf
    lab_2	rr b
    	inc h
    	jr nc,lab_1
    	ex (sp),hl
    	ld (hl),b
    	pop hl
    	ret
    
    ; de - адрес на экране, куда распаковываем
    ; hl - откуда распаковываем
    
    DEPACK1 ld b,(hl)
    	inc hl
    	ld c,8
    	xor a
    depa_1	rr b
    	jr nc,depa_2
    	ld a,(hl)
    	inc hl
    depa_2	ld (de),a
    	inc d
    	dec c
    	jr nz,depa_1
    	ret
    этим лучше пакуются последовательности одинаковых байт

    Дальше буду оъяснять на пальцах, потому как то, что я накодил под этот вариант не вполне понимаемо даже мной самим, да к тому же объёмно

    и в варианте Vitamin'а, и в написаном выше упакованое знакоместо представляет собой следующее: (флаги,[данные])
    если знакоместо пустое, оно представлено только одним нулевым байтом. У меня родилась следующая идея - берём 8 знакомест подряд, пакуем их (любым из двух методов) и составляем ещё один флаговый байт (обозначим flag2) - если знакоместо пустое (флаг=0), то мы сбрасываем бит в flag2 и данное знакоместо в поток не выводим (т.о пустое знакоместо у нас стягивается в 1 бит), а если не пустое - устанавливаем бит в flag2 и выдаём упакованое знакоместо в поток целиком.
    поток тогда будет выглядеть так:
    flag2,([флаги],[данные] - до 8 раз),flag2,...

    На этом делается ещё 2 метода упаковки

    и ещё один. экспериментальный, в теории жмёт лучше остальных.
    берём 4 знакоместа и составляем flag2 таким образом
    - если знакоместо пустое, в flag2 пихаем 00 и в поток ничего не идёт
    - если знакоместо полное (8 байт #ff), в flag2 ложим 01, в поток - ничего
    - ? по идее надо найти ещё одно распространённое знакоместо, которому будет соответствовать 10 в flag2
    - иначе пакуем знакоместо (выбраным методом), ложим в flag2 11 и выдаём упакованое знакоместо в поток

    Э... сам плохо понял, что сказал, но если что неясно - попробую вспомнить подробнее

    Во вложении - прога упаковки ещё одним сумашедшим форматом
    1. картинка сканируется на предмет полных знакомест
    2. на основе скана создаётся 1й слой (битовый)
    3. все продетектеные знакоместа из картинки стираются
    4. остальное пакуется одним из двух методов (а потому как пустых знакомест стало больше, а они пакуются лучше всего, то и коэффициент сжатия увеличивается)
    Вложения Вложения
    Последний раз редактировалось SAM style; 21.09.2006 в 22:51.
    Все любят гипножабу

  6. #16

    Регистрация
    25.06.2005
    Адрес
    Одесса
    Сообщений
    1,821
    Спасибо Благодарностей отдано 
    67
    Спасибо Благодарностей получено 
    74
    Поблагодарили
    31 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Нет, все понял. Понял даже лучше, чем механизм у Vitamin. Спасибо большое.
    В общем случае, я так понимаю, хорошо составить словарь из 2^n повторяющихся во входном потоке знакомест. Тогда в два прохода (или около) при наличии памяти для подсчетов под словарь, должно сиильно жмакатьтся...

    Например, можно так? флаговый байт 1+7 бит. 1 бит указывает на букву алфавита или на чужеродный знак, остальные либо номер буквы (все 0 всегда пустое, 1 -- всегда полное), либо биты повторения последующих байтов чужеродного знака. При этом теряется один бит, для первого или последнего байта -- т.е. он уже не участвует в повторении. Но зато обходимся одним флаговым байтом на знакоместо...
    (сам Клайв велел повесить словарь на IX... )

    Я попытаюсь написать на этой основе отдельно WiPack -- сжимающий знакоместное окно (спрайт, в общем) -- и WiDepack, требующий номер спрайта в файле, окно внутри спрайта (необяз.) и координаты вывода. Со всем этим интро должно вроде выйти, как задумывалось. Скорость, конечно, какая там еще будет...
    Последний раз редактировалось TomCaT; 22.09.2006 в 09:01.
    Помни. Только на компьютере можно семь раз Cut, а один - Format. В реале все иначе. (c)
    Власть людей сильнее, чем люди у власти.
    Чем меньше мы смотрим на мир, тем больше задумываемся о нем. (c)

    Скрытый текст

    Can you help Robin in his quest for the silver arrow? (c) Odin "Robin of the Wood"
    Мы все немного режем по дереву, а потом собираем корабли в бутылках.
    Is it the same old story you are going to tell me
    or is it the old story telling me and you we are the same?
    http://www.sky.od.ua/~ptsk
    [свернуть]


  7. #16
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  8. #17

    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,286
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    91
    Поблагодарили
    39 сообщений
    Mentioned
    8 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Можно модифицировать метод битового потока следующим образом:
    0- пустое знакоместо
    10- знакоместо сжатое методом zeropack (SAM style)
    11- знакоместо сжатое методом bitpack (Vitamin)

    декодер, в отличие от кодера, получается достаточно простой.

    А еще я писал пакер спрайтов с маской, причем умный- знакоместа со сплошной маской не запоминались вообще. Как раз для гамезов и прочего

  9. #18

    Регистрация
    25.06.2005
    Адрес
    Одесса
    Сообщений
    1,821
    Спасибо Благодарностей отдано 
    67
    Спасибо Благодарностей получено 
    74
    Поблагодарили
    31 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vitamin
    Можно модифицировать метод битового потока следующим образом:
    0- пустое знакоместо
    10- знакоместо сжатое методом zeropack (SAM style)
    11- знакоместо сжатое методом bitpack (Vitamin)
    интересно. Как вариант -- смесь методов. Но кодер буудет, уююй, наверное.

    Цитата Сообщение от Vitamin
    декодер, в отличие от кодера, получается достаточно простой.
    как всегда

    Цитата Сообщение от Vitamin
    А еще я писал пакер спрайтов с маской, причем умный- знакоместа со сплошной маской не запоминались вообще. Как раз для гамезов и прочего
    тоже интересно. Хоть одним глазком бы... Ну да ладно, не буду жадничать. Возьму что-то из вышеперечиленного.
    Помни. Только на компьютере можно семь раз Cut, а один - Format. В реале все иначе. (c)
    Власть людей сильнее, чем люди у власти.
    Чем меньше мы смотрим на мир, тем больше задумываемся о нем. (c)

    Скрытый текст

    Can you help Robin in his quest for the silver arrow? (c) Odin "Robin of the Wood"
    Мы все немного режем по дереву, а потом собираем корабли в бутылках.
    Is it the same old story you are going to tell me
    or is it the old story telling me and you we are the same?
    http://www.sky.od.ua/~ptsk
    [свернуть]


  10. #19

    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,286
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    91
    Поблагодарили
    39 сообщений
    Mentioned
    8 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от TomCaT
    интересно. Как вариант -- смесь методов. Но кодер буудет, уююй, наверное.
    уююй у меня кодер в студии- там один поток данных (маска разделяет знакоместа и смещения) и поток атрибутов (тоже маска разделяет смещения и цвета). как уж я там извращался чтоб упаковать... пришлось через промежуточные буфера крутить, иначе никак.
    а спрайтовый движок могу подкинуть- я под него тоже плагин к бге писал, на выходе сразу аласмовский файл дает с данными. правда атрибуты не поддерживает (не нужны были)

  11. #20

    Регистрация
    17.01.2005
    Адрес
    Gorno-Altaysk
    Сообщений
    82
    Спасибо Благодарностей отдано 
    2
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    2 TomCaT: Как вариант - попробовать multsystem2: если есть последовательность экранов. Это "корректировка" laser comlact версии, кажется четвертой для сжатия именно последовательности экранов.

Страница 2 из 3 ПерваяПервая 123 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. FAR: просмотр графики
    от elf/2 в разделе Утилиты
    Ответов: 39
    Последнее: 31.07.2009, 20:18
  2. Хороший эмулятор
    от ian в разделе Эмуляторы
    Ответов: 13
    Последнее: 06.01.2006, 13:43
  3. Лучший конвертер графики ПЦ==>ZX
    от poison в разделе Графика
    Ответов: 37
    Последнее: 05.11.2005, 03:20
  4. Хороший ПЦшный ассемблер - залог успеха!
    от Aprisobal в разделе Программирование
    Ответов: 35
    Последнее: 08.08.2005, 15:25
  5. Хороший ПЦшный редактор спрайтов - залог успеха!
    от Aprisobal в разделе Программирование
    Ответов: 0
    Последнее: 01.03.2005, 00:48

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •