Создание графических элементов с помощью низкоуровневых языков – достаточно сложный процесс по сравнению с решением тех же задач на высокоуровневых языках программирования. Однако, несмотря на трудоёмкость исполнения, это даёт некоторые преимущества. Например, такие, как:
Более рациональное использование памяти
Более высокая скорость исполнения
максимально эффективное использование ресурсов процесса
Исходя из этого, можно понять, что при работе с большими объёмами графической информации умение работать с графикой на машинно-зависимых языках просто необходимо для создания эффективной программы. По этой причине рассмотрим некоторые способы работы с графическими элементами на языке Assembler.
Одной из особенностей данного языка является то, что программист напрямую указывает процессору режим работы с графикой. В ассемблере заложено множество режимов ввода-вывода, определяемых шестнадцатеричным числом, находящимся в регистре АН.
Вывод и ввод символов или строк можно осуществить с помощью системного прерывания int 21h. Перед вызовом данного прерывания необходимо поместить в регистр АН номер необходимой DOS инструкции в шестнадцатеричной системе.
Например, при АН=1, производится ввод символа с клавиатуры, с последующим его отображением в консоли, при АН=2, в консоль выводится символ, код которого находится в регистре AL.
Однако DOS инструкции предназначены для ввода-вывода только символьных элементов и в DOS совершенно нет команд для работы с графикой. С этой целью необходимо обратиться к программам BIOS(Basic-In-Out-System). В BIOS, в отличие от DOS, команды вызываются при помощи различных прерываний (в DOSиспользуется только одно прерывание – int 21h). Прерыванием, отвечающим за работу с видеоадаптером, является прерывание int 10h. Данное прерывание позволяет выполнять следующие функции: вывод строк и символьной информации, смена шрифтов, смена цвета, работа с изображениями и др.
Но существует и более высокий уровень работы с графикой на языке Ассемблера – создание графических примитивов.
Графический примитив – простейший геометрический объект, выводимый на экран дисплея. К таким объектам относятся: точка, прямоугольник, отрезок, окружность и так далее.
Для создания примитива с помощью языка ассемблер, нужно последовательно выполнить некоторые шаги для отрисовки графики:
получение дескриптора для программы – во время этого процесса выделяются ресурсы, необходимые для создания оконного приложения;
регистрация класса окна – задание процедуры, которая будет выполнять обработку сообщений, поступающих окну;
создание окна зарегистрированного класса, задание его характеристик, таких, как
cbSize – размер структуры окна
hbrBackground – фон окна
hCursor / hIcon – дескрипторы курсора / иконки
Style – стиль окна
отображение окна на экране – вывод созданного окна на экран монитора.
обновление содержимого экрана в окне – обязательный пункт для отображения созданных графических элементов в окне.
выход из программы и удаление созданных в памяти объектов.
Для того, чтобы графические объекты были выведены на экран, необходимо, чтобы было отправлено, а затем обработано сообщение WM_PAINT.
Система координат для вывода у графических элементов следующая: ось x направлена вправо, ось y вниз. По умолчанию начало отсчёта начинается от левого верхнего угла окна программы. Однако область графического вывода и её начало можно установить с помощью функций SetViewportExtEx и SetViewportOrgEx соответственно. Единицей измерения является логическая единица, изначально соответствующая пикселю изображения. Но при необходимости данное соотношение можно изменить вызвав функцию SetMapMode.
Цвет графических примитивов задаётся с помощью
SetPixel – точки;
CreatePen – линии (перо);
CreateSolidBrush – замкнутые объекты (кисть);
Так же для отрисовки графики можно использовать следующие функции:
LineTo – создание линии от текущей точки до заданной. Заданная точка становится текущей;
MoveToEx – сменить текущую точку;
Ellipse – создание эллипса;
Rectangle – создание прямоугольника;
Arc – создание дуги;
Подводя итог, можно сказать, что, несмотря на всю трудоёмкость процесса графического программирования на ассемблере, это очень эффективный инструмент для повышения производительности программ, предназначенных для работы с графикой.
Библиографические ссылки
Habr Создание графических примитивов на Ассемблере [Электронный ресурс] // URL: https://habr.com/post/134495/
Абрамова О.Ф. Использование мультимедийных технологий в процессе обучения дисциплине "Компьютерная графика" / О.Ф. Абрамова, С.В. Белова // Успехи современного естествознания. - 2012. - № 3. - C. 90.
Волжанов А.А. Графический интерфейс как средство визуализации общения [Электронный ресурс] / А.А. Волжанов, О.Ф. Абрамова // Студенческий научный форум 2014 :докл. VI междунар. студ. электрон.науч. конф., 15 февр. – 31 марта 2014 г. Направл.: Технические науки / РАЕ. - М., 2014. - C. 1-4. – Режим доступа :http://www.scienceforum.ru/2014/pdf/6827.pdf.
Юрицын С.В. Обзор методов графической визуализации процесса моделирования информационных систем [Электронный ресурс] / С.В. Юрицын, О.Ф. Абрамова // Студенческий научный форум 2014 :докл. VI междунар. студ. электрон.науч. конф., 15 февр. – 31 марта 2014 г. Направл.: Технические науки / РАЕ. - М., 2014. - C. 1-5. – Режим доступа :http://www.scienceforum.ru/2014/pdf/7555.pdf.
Морозов О. Е. Вывод простейших графических изображении[Электронный ресурс] / Морозов О. Е./электронная база “Здесь живут знания” - 2012 – статья 8 -Режим доступа :http://podelise.ru/docs/index-25143997-3.html