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

         

А 4 Вычисление значений переменных fwidth и rmndr



Пример А.4. Вычисление значений переменных fwidth и rmndr

Part_3: xor cl, cl ; cl = 0, значение константы сдвига
add ax, 03 ; ax = ax + 3 (ax содержит iwidth)
and al, OFCh очищаем 2 младших разряда ах
cmp bitcnt, 08 bitcnt = 8 ?
je @F -> да, переход на локальную метку @@
add ах, 04 ах = ах + 4
and al, OF8h очищаем 3 младших разряда ах
inc cl cl = 1, значение константы сдвига
cmp bitcnt, 04 bitcnt = 4 ?
je @F -> да, переход на локальную метку @@
add ax, 18h ах = ах + 24
and al, OEOh очищаем 5 младших разрядов ах
mov cl, 03 cl = 3, значение константы сдвига
?: mov bx, ax bx = ах (округленное значение iwidth)
sub bx, iwidth bx = bx — \width


shr bx, cl сдвиг bx вправо на содержимое cl
mov rmndr, bx количество дополнительных байтов
shr ax, cl сдвиг ах вправо на содержимое cl
mov fwidth, ax сохраняем значение fwidth

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

  • выводится только часть рисунка, помещающаяся на экране;
  • увеличивается логический размер строки (раздел, функция 4F06h);
  • устанавливается видеорежим с большим геометрическим разрешением.

двух первых случаях на экране будет видна только часть, а в третьем случае — все изображение, если удастся подобрать подходящий видеорежим. Наиболее универсален второй способ, но для получения всех его преиму-щecTB в задачу надо включить механизм перемещения области видеопамяти, отображаемой на экране. В приложениях для Windows таким механизмом являются горизонтальный и вертикальный "лифты".
Изменять установленный видеорежим или его характеристики в описывае-мой здесь подпрограмме не целесообразно, это надо делать на более высоком уровне. Если же вас устраивает построение части рисунка, размер кото-рой зависит от установленного видеорежима, то в данной подпрограмме можно Принудительно изменитьЬ значения iwidth и iheight.



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