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

Видеорежимы packed pixel graphics


Видеорежимы packed pixel graphics
Видеорежимы packed pixel graphics Видеорежимы стандарта VESA различаются по разрешающей способности и размерам палитры цветов, которые можно одновременно изобразить на экране. В данной,...
Варианты построения строк
Варианты построения строк Точечные рисунки, независимо от их конкретного содержания, всегда занимают на экране прямоугольную область, а их образы хранятся в файлах в виде последовательн...
Построение строки слева направо
Построение строки слева направо В примере 3.15 приведен текст подпрограммы, выполняющей копирование образа строки из оперативной памяти в видеопамять. В результате на экране появится из...
Пример 3 15 Построение строки 256цветного рисунка
Пример 3.15. Построение строки 256-цветного рисунка drawline: movs byte ptr [di] , fs:[si] ; запись кода точки в видеобуфер...
Ускорение цикла построения
Ускорение цикла построения. Для ускорения построения строки используется микропрограммный цикл пересылки, аналогичный описанному в примере 3.8. Мы просто перепишем этот пример, изменив...
Пример 3 16 Ускоренное построение строки рисунка
Пример 3.16. Ускоренное построение строки рисунка drawline: push dx сохранение содержимого регистра dx mov dx, di копирование адреса в регистр dx add dx, ex сумма текущего адреса и коли...
Распаковка 16цветных строк
Распаковка 16-цветных строк Код 16-цветного рисунка занимает 4 разряда, и для сокращения размера файла в одном байте располагаются коды двух точек. Перед записью в видеопамять находивш...
Пример 3 17 Подпрограмма построения
Пример 3.17. Подпрограмма построения строки 16-цветного рисунка rwlin4 : mov al, fs:[si] читаем в al код пары точек shr al, 04 выделяем код старшей точки stosb записываем его в видеоп...
Воспроизведение не сжатых рисунков
Воспроизведение не сжатых рисунков Строки образа рисунка могут храниться в файле в прямом или обратном порядке. В первом случае они расположены по возрастанию номеров, т. е. сначала в ф...
Пример 3 21 Работа с прямоугольной
Пример 3.21. Работа с прямоугольной областью небольшого размера draw: PushReg <di, si, cx,b> ;,Cur...
Выбор вспомогательной подпрограммы
Выбор вспомогательной подпрограммы В разделе 3.3.1 было описано несколько вариантов подпрограмм построения строки, каждый из которых применим в конкретных случаях. Все они совместимы по...
Особенности работы с большими рисунками
Особенности работы с большими рисунками Большие рисунки не помешаются в одном сегменте оперативной памяти, и их приходится считывать и выводить на экран по частям. В этом случае при пос...
Размер считываемой порции
Размер считываемой порции Пока образ рисунка помещается в одном сегменте, не нужен контроль значений адресов оперативной памяти. Однако при считывании части образа большого рисунка в се...
Новые переменные
Новые переменные При построении рисунка используются следующие новые переменные, которые должны быть описаны в разделе данных. Первые четыре из них являются параметрами подпрограммы....
Пример 3 22 Построение рисунка произвольного размера
Пример 3.22. Построение рисунка произвольного размера SwpOf fs dw 0 адрес (смещение) в буфере обмена S...
Пример 3 23 Чтение фрагмента файла в буфер обмена
Пример 3.23. Чтение фрагмента файла в буфер обмена Readf: PushReg <bx,dx,ds> ; сохраняем в стеке bx и ds mov bx, handler ; указываем заголовок файла Ids dx, dword ptr SwpOffs; з...
Рисунок не помещается на экране
Рисунок не помещается на экране Существуют рисунки, размеры которых превышают размер рабочей области экрана. В таких случаях способ построения выбирается в зависимости от назначения рис...
Воспроизведение сжатых рисунков
Воспроизведение сжатых рисунков Для сокращения размера файлов образы рисунков могут храниться в сжатом виде. Частным случаем является упаковка точек 16- и 2-цветных рисунков, когда в ба...
Техника распаковки строки
Техника распаковки строки Признаком упакованного рисунка является во втором байте заголовка файла. Результаты упаковки по способу RLE интерпретируются так: если в текущем байте установл...
Подпрограмма распаковки строки
Подпрограмма распаковки строки Предположим, что в оперативной памяти задача зарезервировала пространство для размещения буфера общего назначения достаточно большого размера. Сегмент, в...
Пример 3 24 Распаковка строки рисунка (способ RLE для PCX)
Пример 3.24. Распаковка строки рисунка (способ RLE для PCX) Unpack: PushReg <ax,cx,dx,di,es> ; сохранение содержимого регистров les di, Dword ptr GenOffs; смещение и сегмент б...
Пример 3 25 Чтение очередного символа из буфера обмена
Пример 3.25. Чтение очередного символа из буфера обмена Nxt sym: cmp si, incount в буфере есть символы ? jb @F -> да, можно читать очередной символ push ex сохраняем содержимое сх...
Построение рисунка
Построение рисунка В цикле построения упакованного рисунка каждая строка сначала распаковывается с помощью подпрограммы unjopack, а затем результат распаковки записывается в видеопамят...
Пример 3 26 Построение рисунка упакованного в стандарте PCX
Пример 3.26. Построение рисунка, упакованного в стандарте PCX PackDrw PushReg <cx,si,di,C jr win>; сохранение испо...
Недостатки сжатия по способу RLE
Недостатки сжатия по способу RLE Способ сжатия RLE используется не только в стандарте PCX, но и в стандарте BMP. В деталях эти варианты различаются, но в главном они совпадают. При упак...
Характеристика стандарта GIF
Характеристика стандарта GIF Проблема сжатия рисунков приобрела особую важность по мере развития сначала локальных, а затем и глобальных сетей ЭВМ. В июне 1987 года компания CompuServe...
Заключительные замечания
Заключительные замечания До сих пор мы рассматривали способы работы с рисунками "в чистом виде" -- обсуждали варианты построения рисунков и ничего не говорили о сопутствующих...
Установка палитры
Установка палитры В файлах, содержащих образы точечных рисунков, обязательно хранится палитра, в которой находятся коды использованных в рисунке цветов, иногда ее называют таблицей цвет...
Изменение состояния курсора
Изменение состояния курсора Трудно представить графическую задачу, при выполнении которой не используется курсор — специальный рисунок, указывающий на экране текущее положение манипулят...
Маскировка
Маскировка Существует особая категория рисунков, при построении которых используется маска. Маска может храниться в готовом виде в файле, содержащем рисунок, например она обязательно п...
Перемещение рисунков
Перемещение рисунков Простейшим примером перемещаемого рисунка является изображение курсора. Работа с ним подробно описана в главе 6. В общем случае при первом построении перемещаемо...
Идентификация находящихся на экране объектов
Идентификация находящихся на экране объектов Из опыта работы с компьютером вы наверняка знаете, что с помощью манипулятора "мышь" можно не только перемещать изображение курсора по...
Таблица состоит из строк одинакового
Таблица состоит из строк одинакового размера, расположенных в оперативной памяти последовательно друг за другом. Поэтому возможен прямой доступ к любой строке. Элементы списка могут им...
Работа с отдельными точками
Работа с отдельными точками Компьютерная графика, независимо от ее сложности, в конечном итоге сводится к работе с отдельными точками изображения. В режимах PPG каждой точке экрана соо...
Команды для манипуляции с точками
Команды для манипуляции с точками В графических режимах VESA, за исключением EGA graphics, доступ к видеобуферу ничем не отличается от доступа к оперативной памяти (ОЗУ, RAM). Поэтому д...
Таблица 3 1 Пересылка из памяти в память
Таблица 3.1. Пересылка из памяти в память Пересылка байта Пересылка слова Пересылка двух слов mov al, fs:[di] mov ax, fs:[di] mov eax, fs:[di]...
Таблица 3 2 Назначение строковых операций
Таблица 3.2. Назначение строковых операций Размер операнда в байтах Чтение памяти в аккумулятор accum = ds:[si] Запись аккумулятора в память es:[di] = accum...
Смена сегмента источника
Смена сегмента источника Очевидным недостатком строковых операций ЭДяются фиксированные сегменты операндов источника и приемника, -егмент приемника менять нельзя, а вот сегмент источни...
Пример 3 1 Очистка сегмента с использованием команды mov
Пример 3.1 . Очистка сегмента с использованием команды mov хог еах , еах очистка регистра еах хог di, di di = 0, адрес начала сегмента mov сх, 16384 сх = 16384, счетчик повторов I...
Пример 3 2 Микропрограммный цикл очистки сегмента памяти i
Пример 3.2. Микропрограммный цикл очистки сегмента памяти i еах, еах ; очистка регистра еах di, di ; di = 0, адрес начала сегмента сх, 16384 ; сх = 16384, счетчик повторов stosd ;...
Окна видеопамяти
Окна видеопамяти При работе в видеорежимах SVGA изображение, находящееся на экране монитора содержит большое количество точек. Оно зависит от разрешающей способности установленного режи...
Сегментирование памяти
Сегментирование памяти Независимо от конкретного назначения команды IBM PC всегда имеют доступ к ограниченному пространству адресов, предельный размер которого зависит от нескольких фа...
Доступ к сегментам
Доступ к сегментам При работе на IBM PC в реальном режиме для доступа к пространству адресов, расположенному за пределами сегмента, используются два разных способа, выбор которых зависи...
Закрашивание рабочей области экрана
Закрашивание рабочей области экрана Для иллюстрации работы с окнами эассмотрим подпрограмму, которая последовательно заполняет заданным «содом отображаемую на экране часть видеопамяти, в...
Пример 3 3 Закрашивание всего экрана заданным цветом
Пример 3.3. Закрашивание всего экрана заданным цветом fillscr: PushReg <es,di,dx, ex, Cur win,eax>; сохранение в стеке mov Cur win, 0 очистка переменной Cur win call SetWin...
Точки и их адреса
Точки и их адреса Для того чтобы записанная в видеопамять точка оказалась в нужном месте экрана, надо связать ее расположение на экране с адресом видеопамяти, по которому производится з...
Подпрограмма CallWin
Подпрограмма CallWin В примере 3.4 приведен текст подпрограммы, высляющей адрес точки описанным способом. Вычисленный адрес окна присваивается переменной cur_win, окно устанавливается...
Пример 3 4 Вычисление и установка окна и адреса точки
Пример 3.4. Вычисление и установка окна и адреса точки CallWin: PushReg <dx, ax> сохранение регистров dx и ах mov ax, horsize...
Использование CallWln
Использование CallWln В примере 3.5. показано, как можно поместить точку белого цвета в центр экрана. Будем считать, что переменные Horsize и versize содержат количество точек на экране...
Пример 3 5 Вывод белой точки в центр экрана
Пример 3.5. Вывод белой точки в центр экрана mov dx, versize ; количество точек по вертикали shr dx, 01 ; уменьшаем в 2 раза mov ex, horsize ; количество точек по горизонтали shr сх, 0...
Смежные точки и их адреса
Смежные точки и их адреса Смежные точки расположены на экране монитора рядом друг с другом. Если опорная точка не лежит на границе экрана, TO ее окружает 8 смежных точек. Их расположени...
Таблица 3 3 Расположение и адреса смежных точек
Таблица 3.3. Расположение и адреса смежных точек Расположение точек Приращения адресов 8 6 7 -1-h -h 1-h 5 0 1 -1...
Построение геометрических фигур
Построение геометрических фигур Геометрические фигуры являются наиболее подходящими объектами для первого знакомства с компьютерной графикой. Способы их построения зависят только от при...
Прямые линии
Прямые линии Прямые линии бывают горизонтальные, вертикальные и наклонные, от этого зависят способы (алгоритмы) их рисования. Линии на экране далеко не всегда являются гладкими, в больш...
Пример 3 6 Подпрограммы для рисования горизонтальной линии
Пример 3.6. Подпрограммы для рисования горизонтальной линии ; Вариант 1, используется команда пересылки horline: mov es : [di] , al запись кода точки в видеобуфер inc di увеличение а...
Рисование линии справа налево
Рисование линии справа налево Рассмотрим, как можно нарисовать на экране горизонтальную прямую линию в направлении справа налево. Два варианта подпрограмм приведены в примере 3.7, их вы...
Пример 3 7 Рисование горизонтальной линии справа налево
Пример 3.7. Рисование горизонтальной линии справа налево ; Вариант 1, используется команда пересылки. invline:mov es:[di], al запись кода точки в видеобуфер sub di, 01 уменьшение адреса...
Ускорение цикла рисования
Ускорение цикла рисования Если из подпрограмм примера 3.6 исключить проверку адресов и установку следующего окна, то цикл записи в первом варианте подпрограммы будет состоять из трех ко...
Пример 3 8 Подпрограмма быстрого
Пример 3.8. Подпрограмма быстрого рисования горизонтальной линии horline: push dx сохранение содержимого регистра dx mov dx, di копирование адреса в регистр dx add dx, ex сумма текуще...
Пример 3 9 Замена команды rep stosb на rep stosw
Пример 3.9. Замена команды rep stosb на rep stosw shr ex, 01 ; уменьшаем количество точек в два раза jnc @F ; -> обход следующей команды (stosb) stosb ; запись дополнительной точки...
Пример 3 10 Замена команды rep stosb на rep stosd
Пример 3.10. Замена команды rep stosb на rep stosd shr сx, 01 уменьшаем количество точек в два раза jnc @F -> обход следующей команды (stosb) stos...
Рисование гладких линий
Рисование гладких линий Гладкие линии не содержат ступенек, они могут быть горизонтальными, вертикальными или наклонивши под углом, кратным 45 градусам. При их построении адреса смежных...
Пример 3 11 Подпрограмма для рисования гладких линий
Пример 3.11. Подпрограмма для рисования гладких линий anyline: mov es: [di] , al запись кода точки в видеобуфер...
Произвольные линии
Произвольные линии При рисовании произвольных линий, в отличие от гладких, вычисляется приращение адреса в каждой точке. В этом случае при перемещении от точки к точке значение одной ко...
Прямоугольники
Прямоугольники При рисовании прямоугольников можно преследовать две разные цели -закрашивание (заливка) прямоугольной области экрана выбранным цветом или рисование сторон (контура) прям...
Полоса заданного цвета
Полоса заданного цвета Предположим, что ширина прямоугольника равна ширине рабочей области экрана (Horsize), а ее высота (толщина) составляет N точек. В примере 3.12 приведен текст подп...
Пример 3 12 Закрашивание прямоугольной полосы
Пример 3.12. Закрашивание прямоугольной полосы stripe: PushReg <di,cx,Cur win> ; сохранение di, ex и Cur win fillbar: push ex ; сохранение т...
Вычисление адресов строк
Вычисление адресов строк Первые точки строк прямоугольной области находятся в одном столбце, поэтому в режимах PPG адреса начала смежных строк различаются на величину Horsize (см. табл....
Пример 3 13 Подпрограмма закрашивания прямоугольной области
Пример 3.13. Подпрограмма закрашивания прямоугольной области rctngl: PushReg <bx, ex, di, Cur win> сохранение в стеке mov bx, horsize ко...
Пример 3 14 Подпрограмма рисования контура прямоугольника
Пример 3.14. Подпрограмма рисования контура прямоугольника round: PushReg <bx,Cur win,cx,di> ; сохранение исходного состояния...
Построение рисунков
Построение рисунков В отличие от геометрических фигур рисунки не создаются в процессе выполнения задачи, а готовятся заранее и хранятся в файлах, на внешних носителях. К сожалению (или...








Начало