PDA

Просмотр полной версии : Корвет: граф редактор ABRIS



esl
04.02.2015, 12:26
Увлёкшись продолжил с форматами, теперь вот АБРИС ;)

Разобрал формал .ABR

ну что сказать, забавный формат

1) он не послойный, т.е. сразу информация про все 3 слоя
2) поток - байтовый
3) экран/область заполняется пословно с конца !, в реалии PUSH BC
4) в файле есть координаты "окна" на экране куда выводить
5) поток данных - можно сказать блочный
причина очень похоже - вся картинка не влазила в память ;)
(максимальный кусок блока ~25к)
в каждом блоке есть свой заголовок и в нем указана область куда он путается

[:fname, "LEOPOLD"]
[:root, 2, 0, 0, 511, 255]
[:chunk, 25695, 0, 68, 511, 255]
[:chunk, 10438, 0, 0, 511, 68]
[:chunk, 0]

[:chunk,size, x0, y0,x1,y1]

первый кусок y - [68..255]
первый кусок y - [0..68]

как я понял есть два типа файлов
первый байт или 2 или 3
в теории те что 3 - вывод "окна", а 2- целый экран
в декодировании нет разницы.

В декодере 4 типа данных:

0 - смещение вывода или выход (нужно для "окон", как переместить координаты вывода к началу следующей строки)
1 - заполнение ЦВЕТОМ (len,+значение NCREG) (заполняем FF)
2 - заполнить 3 слоя константой (len,+6 байт данных, пара для каждого слоя)
3 - заполнить 3 слоя из данных (len,+2*len*3 данных)

подробности кому интересно в аттаче

Black Cat / Era CG
16.07.2016, 11:45
Попробовал тоже прикрутить этот формат (тупо переписав код из вложения с ruby на pascal). Однако, взлететь с ходу оно не захотело. Почему-то на некоторых картинках @offset (см. вложение предыдущего поста) время от времени принимает отрицательные значения, а то и вовсе значения сильно превышающие вторую верхнюю границу @bitplanes (@offset > 0x3fff).
Вижу пока три возможные этому причины:
1) Я не знаю, как ведет себя ruby при попытке записать значение, выходящее за пределы массива (out of range), возможно в этом случае запись просто не происходит, но ошибки тоже нет. Паскаль же по-честному кричит об ошибке.
2) Вторая возможная (наиболее вероятная) причина. Я где-то (пока не нашел где) накосячил при переписывании кода.
3) И третья (слабо вероятная) причина. Сами картинки, возможно, немного побитые. Но это маловероятно.
Ковыряюсь дальше.