Иллюстрированный самоучитель по SVGA

Построение рисунков, использующих палитру. Построение рисунка сверху вниз.

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

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

  • bperline – размер отображаемой на экране строки в байтах
  • bytppnt – размер кода точки, выраженный в байтах
  • wrdppnt – размер кода точки, выраженный в словах

Они используются в описанных ниже подпрограммах для автоматической настройки на установленный задачей видеорежим.

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


Здесь описан способ построения рисунка, при котором строки его образа выбираются в обратном порядке (начиная с последней строки), а на экран выводятся в естественном порядке сверху вниз.

Исходные предпосылки

Сразу отметим, что такой способ построения не является универсальным. Его можно использовать для воспроизведения рисунков небольшого размера, образы которых помещаются в одном сегменте оперативной памяти (не превышают 65 536 байтов).

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

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

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.