Передовица » Макулатура » ИиО » Ещё раз об образах

Ещё раз об образах (N1/1993)

Автор рассказывает о собственном редакторе образов (тех, что выводятся операторами DRAW и XDRAW), но не приводит его исходника и даже своих координат.

А.Новиков. Cтудент III курса МПИ. Группа сайта просит вас связаться с нами! (ЗАЧЕМ ЭТО?)

В журнале ИНФО N 3-4 за 1992 г. был опубликован редактор для создания графических образов на ПЭВМ "Агат". Мной был разработан собственный редактор образов. В отличие от уже опубликованного, он рассчитан на более квалифицированного пользователя, позволяет упростить его работу и сократить затраты памяти и время вывода образа на экран.

Сеанс работы с редактором выглядит так.

При запуске, после завершения редактором подготовительных операций, он высвечивает заставку. Начало работы происходит после нажатия любой клавиши.

На экране появляются синие квадраты, символизирующие узловые точки будущего образа. В центре экрана мигает курсор. Редактор находится в режиме свободных перемещений, в котором запоминание вводимых команд не производится. Пользователь может нарисовать задуманный образ, опробовать методы его обхода. В этом режиме можно не бояться делать ошибки - они никак не отразятся на готовой продукции. Этот режим также может использоваться при создании образа для перехода от одной его части к другой, если какая-либо его часть не помещается на экране и изображена отдельно.

Управление курсором:

стрелки - перемещение со следом;

2,4,5,6 (боковые) - перемещение без следа;

‹РЕД› - циклическая смена режимов СВОБ. ПЕРЕМЕЩЕНИЕ/ВВОД.

Для окончания работы с этим режимом курсор приводится в ту точку, с которой вы хотите начать (или продолжить) обрисовку образа, и нажать ‹РЕД›.

Основной режим - режим ВВОДА образа. В этом режиме все действия пользователя записываются в память в формате графического образа. Управление курсором осуществляется так же, как и в предыдущем режиме. В нижней строке экрана, помимо относительных координат курсора, выводятся поля байта: A, B и C. Именно наличие контроля этих полей позволяет оператору сэкономить память. Дело в том, что как поля, так и перемещения не совсем равнозначны между собой. На них распространяются 3 ограничения:

1) В поле C не может быть введено "перемещение со следом".

2) Байт должен быть "закрыт", то есть его последнее рабочее поле не должно содержать "перемещение вверх без следа".

3) В случае невозможности (или ненужности) использования последних одного или двух полей (C или BC в силу п. 1 и 2), они должны быть сделаны нерабочими. Для этого достаточно в соответствующем поле нажать ‹ВВОД› (но не в поле A, так как это приведёт к завершению ввода образа).

Эти ограничения продиктованы особенностями интерпретатора языка BASIC и рассматриваются подробнее в ИНФО N 3-4 1992 и в описании ПЭВМ "Агат" Фг.00003-01 33 02. Редактор учитывает вышеизложенные ограничения и защищает работу пользователя от возможных ошибок. Приведу пример:

Пример 1. Пусть необходимо создать образ, изображённый на рис.1, и курсор находится в нижнем квадрате. Если редактор не контролирует поля байта, то пользователь создаст образ и займёт 6 байтов.

Если же редактор сообщает пользователю, какое поле сейчас вводится, то последний может изменить последовательность перемещений и уложиться в 5 байтов.

После ВВОДА в поле A образ считается законченным. Программа переходит к режиму просмотра. Теперь пользователь видит образ таким, каким он будет после "вживления" в ту программу, для которой он создавался. Стрелками вверх/вниз изменяется масштаб; стрелками вправо/влево - поворот образа; РЕД - переход к последнему режиму - режиму выдачи результата.

В этом режиме программа сообщает адреса памяти, в которые загружены коды образа для возможной записи их в виде B-файла, и выводит эти коды на экран в форме, удобной для макроассемблирования. В приведённом выше примере на экране появится сообщение:

ВАШ  ОБРАЗ  ЗАГРУЖЕН  В  ЯЧЕЙКИ
 $3000.$3004 И КОДИРУЕТСЯ ТАК:
         !$CE0180400

Теперь можно загрузить программу, для которой создавался этот образ (или набрать NEW, если её ещё нет), и ввести в неё строки кодов образа, пронумеровав их. Это может выглядеть так:

10 BUFOBR=$1800: KOLVO=1
20 * $Е8:
          ! = BUFOBR
          ! :
30 * BUFOBR :
          ! = KOLVO
          ! $0400
90 REM ДАЛЕЕ CAM ОБРАЗ
100       ! $DCE0180400
990       ! :
1000 HGR= 2: COLOR= 15
1010 ROT= 0: SCALE= 1
1020 DRAW 1 AT 127,127

Здесь: BUFOBR - буфер образов - место в памяти, куда образы будут загружены; KOLVO - количество образов.

В строке 10 устанавливаются буфер образов и их количество; в 20 - интерпретатор настраивается на таблицу образов; в 30 - в таблицу заносятся количество образов и KOLVO раз смещение начала каждого образа относительно BUFOBR (разность между BUFOBR и адресом начала соответствующего образа). В строках 100-980 записываются коды образа (если их несколько, то образы записываются один за другим, начало каждого отмечается меткой для вычисления смещения - см. программу 2). Строки 1000-1020 отвечают за вывод первого образа в центре экрана.

Эта программа является схемой наиболее простого и удобного оперирования образами.

Система управления образами работает только на графике высокого разрешения (HGP). Однако её можно применять и для графики среднего разрешения (MGP), хотя это и уменьшает гибкость системы. При этом образ описывается в представлении HGP с учётом цвета будущего фона (машина не знает о том, что работает с цветной графикой и выводит якобы на HGP совокупность точек, которая при рассмотрении с MGP образует задуманный цветной образ). Приведу пример.

Пример 2. На MGP необходимо изобразить рис.2а. Преобразуем его для HGP (если хотите увидеть это преобразование на машине, нарисуйте цветное изображение в графическом редакторе (например, GREDIT), а затем нажмите ‹СБРУПР›, x$C723, ‹ВВОД›). В результате получим рис.2б). Преобразовав при помощи редактора чёрно-белое изображение в последовательность кодов образа, встроим её в программу. Инициализировав MGP, воспользуемся операторами DRAW или XDRAW. Учтите, что, для того чтобы изображение оказалось в координатах (X, Y), его следует заказать в координатах (X*4+A, Y*2+B), где параметр A (0-3) следует подобрать экспериментально (он зависит от положения начальной точки обхода образа и постоянен для данного образа). Параметр X=(X AND 127), а B=(X AND 128)/128. Ниже привожу программу использования образов на MGP:

10 BUFOBR = $1800: KOLVO = 3
20 * $E8:
     !  = BUFOBR
     ! :
30 * BUFOBR:
     !  = KOLVO
     !  = T1 - BUFOBR
     !  = T2 - BUFOBR
     !  = T3 - BUFOBR
40 K = 1
90 REM ДАЛЕЕ САМ ОБРАЗ
100  !   T1:$0D0D0D161F1F1F56
110  !  $DFFB1BDF13B29292
120  !  $924A694820604821
130  !  $602068094D6989B2
140  !  $DADBDB134D8A1606
150  !  $00
160  !   T2:$4929690D161F1F1F
170  !  $56DFFB1BDF938D4A
180  !  $4D2160494A094DB1
190  !  $DB92DA121616C4C0
200  !  $C0E3D8B316DF9304
210  !  $00
220  !   T3:$0D0D0D161F1F1F8E
230  !  $16DFFB9B6A49494D
240  !  $6909DFDBDB12164D
250  !  $F99BFA1BDF934D49
260  !  $094D910700
990  !  :
1000 MGR= 2: COLOR= 9: PLOT 0,73 TO 127,73: COLOR= 15
1010 ROT= 0: SCALE= 1
1020 FOR B = 0 TO 1: FOR I = 1 TO 252 STEP 4
1030 K = K + 1: IF K=4 THEN K = 1
1050 XDRAW K AT I,126+B
1060 FOR T = 1 TO 100: NEXT
1070 XDRAW K AT I,126+B
1090 NEXT I,B

В заключение отмечу, что поворот и масштабирование образа на MGP нежелательны, так как вызывают искажение цветов.

* * *

Использование материалов проекта agatcomp без получения предварительного письменного разрешения agatcomp запрещено.


Почта для обратной связи: mail@agatcomp.ru


Живое общение по теме Агата: Telegram группа Agatcomp.


Накопленные знания и проекты: тематический ФОРУМ.


© 2004-2024 agatcomp.su / agatcomp.ru

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *