Графические устройства

         

Адрес следующей строки



Адрес следующей строки

Если строки графического объекта обрабатываются последовательно друг за другом, то после построения текущей строки надо определить адрес начала следующей (или предыдущей) строки. В этом случае простой переадресации операндов недостаточно.
Первые точки строк прямоугольной области расположены на экране в одном столбце. Значения координаты х у них совпадают, а координаты Y различаются на величину, кратную значению переменной bperline. Это и надо учесть при вычислениях.

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

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

offsline = bperiine — widthrect*bytppnt = (horsize — widthrect)*bytppnt.

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

При работе в режимах PPG bytppnt=1 и формула превращается в разность (horsize - widthrect), которая и вычислялась в приведенных ранее примерах. В разделe и разделe при описании подпрограмм построения и перемещения изображения курсора мы советовали в режимах direct color сдвигать указанную разность на 1 или 2 разряда влево. Такой прием прост, но не универсален. Универсальные способы вычисления значения offsline для режимов direct color описаны ниже в разделе.

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

 



Содержание раздела