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

         

Рисунок не помещается на экране



Рисунок не помещается на экране

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

Прежде чем обрезать рисунок, имеет смысл определить его размеры. Возможно, что вам попалась одна из заставок, предназначенная для вывода при высоком разрешении, например 800x600 или 1280x1024 точки. Если вас устраивает работа в таких видеорежимах, то проблемы не существует, достаточно просто устанавливать в задаче нужный видеорежим.

Обрезать рисунок можно и в процессе его построения. Если ширина рисунка превосходит Horsize, то при построении строк в видеопамять записывается ровно Horsize точек, а остатки отбрасываются. Если высота рисунка превосходит versize, то выводится ровно versize строк, а остальные отбрасываются. Изменить подпрограмму построения рисунка не сложно, вопрос в том, целесообразно ли это делать?

Более гибкий способ заключается в принудительном изменении размера сканируемой строки (scaniine). Эта величина задает количество точек, после вывода которых видеоконтроллер переходит на новую строку. После установки видеорежима scaniine и Horsize равны. В разделе описана функция BIOS 4F06h, которая позволяет установить нужное значение Scaniine, но не меньшее чем Horsize. Если Scaniine > Horsize, то в процессе отображения каждой строки видеоконтроллер выводит на экран Horsize точек, а остальные (scaniine — Horsize) пропускает.

Поэтому можно просто копировать рисунок в видеопамять, предварительно установив значение scaniine равным его ширине. После построения на экране будет видна левая верхняя часть рисунка, размер которой равен Horsize Versize. Только не забывайте, что Изменение значения Scaniine сказывается на работе с другими рисунками, в том числе с курсором и текстом. Для учета нового значения надо либо ввести специальную переменную, либо изменить значение переменной Horsize.

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

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

 



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