Конспект лекций Одесса онпу 2005


с. 1

ПАВЛЕНКО В.Д.

КОМПЬЮТЕРНАЯ ГРАФИКА

Конспект лекций



Одесса ОНПУ 2005

Содержание




Введение ………………………………………………………………………………

3

1. ОБЗОР ТЕХНИКИ И ПАКЕТОВ ПРИКЛАДНЫХ ПРОГРАММ

ДЛЯ МАШИННОЙ ГРАФИКИ И ГЕОМЕТРИИ ………………………….............


4


1.1. Машинная графика и геометрия: определения, области применения ……….

4

1.2. Устройства ввода графической информации …………………….....................

5

1.3. Устройства вывода графической информации ………………………………...

7

2. Формирование изображения на экране монитора.

ОСНОВНЫЕ ДАННЫЕ О ВИДЕОАДАПТЕРАХ И ИХ ВИДЕОРЕЖИМЫ …….


10


2.1. Видеоадаптеры. Видеорежимы и их краткая характеристика …..

10

2.2. Формирование изображения на экране монитора ………………..

11

2.3. Дисплейные адаптеры IBM PC и их графические режимы ………

12

3. ГРАФИЧЕСКИЙ ИНТЕРФЕЙС BGI (Borland Graphics Interface) …...

13

4. Библиотека графики Турбо Си graphics.lib ……………………

14

4.1. Инициализация графического драйвера и графического режима

15

4.2. Работа с графикой в системе программирования Турбо – Си ….

16

4.3. Графические примитивы. Графические функции языка СИ для получения изображения на экране дисплея …………………………….

19


4.4. Функции для установки параметров изображения на экране дисплея ………

21

4.5. Функции для получения параметров изображения ……………….

22

5. ПрограмМИРОванИЕ формИРОВАНИЯ графИчЕСКих образОв СРЕДСТВАМИ Турбо СИ ………………………………………………………….

25


5.1. Управление видеостраницей ……………………………………………………

25

5.2. Сохранение изображения в буфере. Запись изображения

из буфера в файл ……………………………………………………………………..


26


5.3. Чтение изображения из файла. Вывод изображения из буфера на экран ………………………………………………………………………………………….

27


6. ОБРАБОТКА ОШИБОК СИСТЕМЫ ГРАФИКИ ТУРБО СИ ………………….

30

7. БИБЛИОТЕКА ФУНКЦИЙ PCX. ПАКЕТ PCX programmer toolkit. …………

32

7.1. Примеры использования функции библиотеки PCX …………………………

35

7.2. Структура файла формата PCX …………………………………………………

37

7.3. RLE – кодирование ………………………………………………………………

37

Литература ……………………………………………………………………………

38

Введение

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



Целью изучения дисциплины "Компьютерная графика" является ознакомление студентов с графическими возможностями современных ПЭВМ, с новыми программными инструментальными средствами формирования графических изображений на экране монитора и вывода их на печать.

Объектом изучения дисциплины является графическая система Турбо Си и средства её программирования в среде MS DOS, которые в настоящее время получили широкое распространение для графического оформления самых разнообразных приложений с использованием современных персональных компьютеров.

В результате обучения студенты должны знать:


  • принципы функционирования устройств ввода-вывода графической информации;

  • основные принципы формирования графических изображений на экране монитора ПЭВМ;

  • алгоритмы и программирование основных графических примитивов;

  • программирования вывода графиков и другие графические представления математических функций.

Дисциплина направлена на подготовку специалистов по специальности 7.091401 - "Системы управления и автоматики".

Материал дисциплины базируется на курсах: "Алгоритмические языки и программирование", "Вычислительные методы", "Высшая математика", "Прикладная математика", "Инженерная графика", "Локальные системы автоматики".

Материал курса используется при изучении курсов "Программное обеспечение современных ЭВМ", "Автоматизация проектирования систем управления", "Проектирование систем управления".

В результате изучения дисциплины "Компьютерная графика" у студентов формируются знания в области принципов функционирования средств ввода-вывода графической информации и формирования графических изображений на экране монитора ПЭВМ, и умения программировать графические образи на алгоритмическом языке Турбо Си и Си++.

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

1. ОБЗОР ТЕХНИКИ И ПАКЕТОВ ПРИКЛАДНЫХ ПРОГРАММ

ДЛЯ МАШИННОЙ ГРАФИКИ И ГЕОМЕТРИИ
1.1. Машинная графика и геометрия: определения, области применения
Под машинной графикой понимают - автоматизацию процесса подготовки, преобразования, хранения и воспроизведения графической информации с помощью ЭВМ и различных графических устройств.

Основные задачи машинной графики:

1.Ввод в ЭВМ (считывание) графической информации.

2.Вывод её из ЭВМ (формирование изображений).

3.Переработка (преобразование) графической информации.

Под машинной геометрией понимают моделирование в ЭВМ геометрических объектов и образов, автоматизированное решение геометрических задач, проведение геометрических расчетов.

Основные задачи машинной геометрии:

1.Синтез в ЭВМ геометрических объектов.

2.Анализ геометрических объектов.

3.Решение геометрических задач.

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

Машинная геометрия и графика (как и САПР или АСНИ) могут быть представлены такими основными частями:



  1. техническое или аппаратное обеспечение ЭВМ, периферийные устройства (УВВ);

  2. программно-математическое обеспечение (различные алгоритмы и математические методы, алгоритмические языки и способы хранения информации).

В настоящее время параллельно развивается несколько направлений машинной графики и геометрии в разных областях применения, для разных типов ЭВМ и графического оборудования, для разных классов изображений:

  1. для автоматизированного проектирования в машиностроении и строительстве, в художественном конструировании (пакет AutoСAD);

  2. в сфере проектирования электронных схем, печатных плат, микросхем и т.п. (ORCAD, PCAD);

  3. программное управление станками, роботами, манипуляторами и подготовка автоматизированного производства (FIX);

  4. цветная и полутоновая графика для формирования реалистических изображений пространственных изображений, в том числе для компьютерной мультипликации (ANIMATOR, 3DMAX STUDIO);

  5. автоматизированная обработка изображения, их хранение, пересылка, анализ, распознавание образов (PhotoShop, Fine Reader);

  6. иллюстративная и деловая графика, наглядное представление информации, исследования в системах управления на производстве (CorelDraw, Excel);

  7. специализированная графика в полиграфии, издательстве и рекламе (CorelDraw, PageMaker);

  8. учебная и игровая графика.


1.2. Устройства ввода графической информации
Виды изображений:

  1. штриховые, линейчатые (изображения, составленные из отрезков, ломанных, кривых линий), и их подклассы: различные толщины линий, несколько возможных цветов яркостей);

  2. аппликационные изображения (имеют вид черно-белых или цветных областей, пятен;

  3. черно-белые и цветные полутоновые изображения (здесь цвет и яркость могут меняться постепенно от точки к точке, это имеет место на фотографиях, в кино, на экранах телевизоров).

Способы технического воспроизведения (чтения) изображений:

  1. траекторный (векторный, поэлементный) способ, т.е. по отдельным линиям, отрезкам, векторам, символам. При этом крайне трудно получать полутоновые изображения;

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

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

Экраны дисплеев ПЭВМ работают на растровом принципе.



Устройства ввода графической информации:

  1. мышь;

  2. шар;

  3. координатный рычаг (джойстик);

  4. световое перо;

  5. клавиатура (клавиши управления курсором);

  6. планшет (дигитайзер, графоповторитель);

  7. телевизионная камера.

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

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


К каждому проводнику подводится определенный двоично-кодированный сигнал, который воспринимается указкой через емкостную связь. Каждая принятая последовательность импульсов соответствует только одному проводнику. Проводники медные полоски, шириной 7.5 мкм, толщина 25 мкм. Расстояние между осями проводников 250мкм. Разрешающая способность планшета не более 0.25 мм. Еще существует планшет на основе акустического принципа определения координат.



С

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

На экран выводится специальный символ-курсор (+). Курсор "прикрепляют" к световому перу, указав на него и нажав переключатель пера. После этого перемещая перо, за ним как "привязанный" следует курсор. Координаты центра курсора в нужные моменты времени передаются в программу графического редактора. После вывода курсора в требуемое положение переключатель отпускают и курсор "отцепляется" от пера.



Мышь. Мышь - манипулятор для ввода информации в компьютер. Представляет собой небольшую коробочку с двумя или тремя клавишами, легко умещающуюся в ладони. Чтобы изменить положение курсора на экране монитора, пользователь перемещает "мышь" по столу или другой ровной поверхности. После того, как мы добиваемся нужной траектории движения курсора по экрану, можно нажать кнопку и координаты курсора запоминаются ПК. Обычно опрос координат производится с низкой частотой (30-60 раз в секунду).

На дне "мыши" располагаются 2 взаимно перпендикулярных колесика. Колесики связаны с резисторами. При манипулировании мышью колесики вращаются и вращаются движки переменных резисторов и соответственно изменяются напряжения на выходах. Снимаемые с движков напряжения обрабатываются АЦП и непосредственно передаются в ОЗУ ПК. Одно колесико смещает курсор по оси x (абсцисс), другое по оси у (ординат).



Рычаг (джойстик, координатная ручка, координатный рычаг). Рычаг имеет две степени свободы, т.е. может перемещаться в направлениях вперед-назад, вправо-влево. Изменяя наклон (угловое положение рычага), перемещаем курсор по экрану дисплея. Движения курсора довольно резки, что препятствует быстрой и точной установке курсора в заданное положение (точному позиционированию). Положение рычага определяет скорость движения курсора. Для того чтобы облегчить пользование рычагом, зависимость скорости движения курсора от смещения часто выбирается нелинейной.

Шар. Принцип действия аналогичен рычагу.

С
канирующие устройства.
С.У. позволяют вводить в ЭВМ тоновые и цветные изображения. Сканеры бывают:

  • настольные (обрабатывают весь лист бумаги целиком);

  • ручные (их надо проводить над нужным рисунком или текстом).

Настольные сканеры применяются в издательских системах (для репродукций).

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

Сканером может быть и обычная ТВ камера, но чтобы с ее помощью ввести изображение в память ЭВМ, требуется высокочастотный фреймграббер с АЦП, который переводит значение интенсивностей каждого из трех цветов изображения (красного, зеленого и синего) в числа и обеспечивает синхронизацию всех устройств.

1.3. Устройства вывода графической информации
Устройства вывода графической информации:


  1. графопостроители (плоттеры);

  2. принтеры;

  3. дисплеи;

  4. цифровые фотоаппараты;

  5. микрофильмирующие устройства.

Плоттер. Плоттер - устройство для вывода чертежей на бумагу. Бывают барабанного типа (работают с рулоном бумаги) и планшетного типа (в них лист бумаги располагается на плоском столе).

Чертят плоттеры шариковыми стержнями, тонкими волоконными перьями - фломастерами, трубчатыми перьями типа репитографа. Выпускают самых разных размеров - от миниатюрных, настольных и до больших машин 5-6 м. длинны и более, на которых в натуральную величину чертят кузова автомобилей, детали самолетов.



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

  • матричные;

  • электростатические;

  • электрохимические и электротермические;

  • струйные (инжекционные);

  • лазерные.

Матричные (или точечно-матричные) принтеры. Принцип печати: печатающая головка принтера содержит вертикальный ряд тонких металлических иголок. Головка движется вдоль печатаемой строки, а стержни в нужный момент ударяют по бумаге через красящую ленту, что обеспечивает формирование на бумаге изображений. Используют печатающие головки с 9, 12, 24 и 48 стержнями (иголками).

Электростатические принтеры. Принцип действия: бумага, пропитанная специальным электризующим составом, разматывается с рулона и проходит над поперечным рядом электродов. В определенные моменты нужные электроды заряжают точки на бумаге. Проходя, дальше бумага попадает под струю краски - суспензии в специальном растворителе. Частички краски прилипают к наэлектризованным точкам, образуя элементы изображения. Дальше бумага обдувается вентилятором и подсушивается. Устройства работают бесшумно. Они рассчитаны на разную ширину бумаги - до 2 м. Дискретность этих устройств составляет от 4-х до 10-и точек на мм. Скорость работы не зависит от сложности изображения.

Электрохимические и электротермические принтеры. Так же работают со специальными сортами бумаги (недостаток). Бумага под действием электродов синеет, краснеет или чернеет.

Лазерные принтеры. Обеспечивают в настоящее время наилучшее (близкое к типографскому) качество печати.

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

Отличие лазерного принтера от ксерокопировального аппарата состоит в том ,что печатающий барабан электризуется с помощью лазера по команде компьютера.

Благодаря плотности (мелкости) растра, не связанного с размерами механических деталей, такие устройства дают изображения высокой разрешающей способности (300 точек на дюйм, или 12 точек на мм.), служащие оригиналами для полиграфического процесса.

Скорость печати - от 15 с. до 3 с. на страницу (для текста), для рисунка - несколько минут.

Выпускаются цветные лазерные принтеры, стоимость которых превышает стоимость IBM PC XT.



Инжекционные (струйные) принтеры. Принцип действия: изображение формируется микро-каплями специальных чернил (красок), выдуваемых (выбрызгиваемых) на бумагу с помощью рядов сопел (микро-форсунок), расположенных на рабочей головке. Эти принтеры работают очень быстро и успешно конкурируют с лазерными. Качество печати - высокое. Можно печатать цветные изображения.

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

Графические дисплеи (графические терминалы). Обеспечивают визуальное отображение графической информации на экране ЭЛТ. Дисплей может быть векторным (прототип осциллографа) или растровым (прототип телевизора) в зависимости от принципа сканирования (произвольного или растрового).

Широко распространенные в настоящее время 15”- мониторы в основном рассчитаны на разрешение до 1280x1024 точек. При рекомендованном разрешении (800x600 или, для некоторых моделей, 1024x768 точек) частота кадровой развертки колеблется в пределах 75-100 Гц. Большинство современных моделей имеют OSD-меню и комплектуются информационными файлами-драйверами, а также файлами с цветовыми профилями, что позволяет использовать их даже для графической обработки изображений.

На сегодняшний день во всем мире стандартом для настольных систем де-факто стали 17-дюймовые мониторы. Максимальное разрешение, на которое рассчитано большинство рассматриваемых 17”- мониторов, 1280x1024 точек. При рекомендуемом разрешении (1024x768 точек) частота кадровой развертки у некоторых моделей достигает 100 Гц. Настраивают почти все модели при помощи OSD-меню.

На последней выставке CEBIT-2000 было представлено множество новых разработок в области отображения и считывания информации, мониторы от 1.5" до 62" (технология-плазменная панель).

Минимальное разрешение определяется в зависимости от диагонали экрана: 14” и 15” модели – 800×600, 17” CRT или 15” LCD – 1024×768, 19” CRT или LCD–панели больше 15” – 1280×1024. Для мониторов с диагональю более 25”, предназначенных в основном для развлекательных целей, необходим режим 800×600 при частоте 60Hz, что соответствует требованиям стандарта NTSC. Также обязательна поддержка горячего подключения HotPlug.

Однако надо констатировать тот факт, что 15” ЭЛТ-мониторы на сегодняшний день оказались практически вытесненными с массового рынка, а в списке новых продуктов, показанных на выставке, фигурировали исключительно 17-, 19-, 20-, 21- и 22-дюймовые модели. Другой важный момент – в индустрии ЭЛТ-мониторов постепенное распространение получает цифровой интерфейс DVI (Digital Visual Interface). Кроме того, больше становится так называемых сверхплоских мониторов (Samsung SyncMaster 700NF и 900NF).

На выставке демонстрировалась новинка – трехмерный монитор BM17HL / BM 17HC (тайваньская фирма Bridge). Эта модель с диагональю 17 дюймов, поддерживает частоту вертикальной развертки до 160 Hz и снабжена стереоочками с ЖК-затворами. В области ЖК-мониторов массовыми продолжают оставаться продукты с диагональю 15 дюймов, хотя постепенное распространение начинают получать и устройства с большим размером экрана.

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

Фирма Casio продемонстрировала часы со встроенной цифровой камерой WQV-1. В качестве светочувствительного элемента WQV-1 используется 1/14-дюймовый CMOS-сенсор, содержащий 28 тыс. пикселов. Отснятые изображения записываются в собственном формате Casio, а при загрузке их на компьютер происходит преобразование в формат JPEG или BMP. Взаимодействие камеры с компьютером осуществляется через ИК-соединение (ИК-адаптер подключается к COM-порту). Для записи снимков служит встроенная память объемом 1MB, в которой их умещается около ста. WQV-1 также оснащена черно-белым ЖК-дисплеем размером 20×20 мм с разрешением 120×120, который можно использовать как в качестве видоискателя, так и для просмотра сделанных снимков.

Компанией LG Electronics представила на выставке видеотелефон VP-100. Он позволяет захватывать статические изображения собеседников в расширении 640×480 и передавать их через встроенный модем 33,6 kbps. Для вывода полученных изображений VP-100 использует 4-дюймовый ЖК-дисплей.



2. Формирование изображения на экране монитора.

ОСНОВНЫЕ ДАННЫЕ О ВИДЕОАДАПТЕРАХ И ИХ ВИДЕОРЕЖИМЫ
2.1. Видеоадаптеры. Видеорежимы и их краткая характеристика
Графические дисплеи обеспечивают визуальное отображение графической информации на экране ЭЛТ. Дисплей может быть векторным (прототип осциллограф) или растровым (прототип телевизор) в зависимости от принципа сканирования (произвольного или растрового).

Растром обычно называют регулярные упорядоченные структуры - решетки, чередование прозрачных и непрозрачных полос. Экран растрового дисплея разбит на фиксированное число точек (элементов отображения – пикселей или пелов), которые образуют матрицу из фиксированного числа строк и столбцов, так называемый регулярный прямоугольный растр. Размеры матрицы могут достигать 1024х1280 элементов. Изображение на экране дисплея создается путем избирательной засветки определенных точек экрана.

Электронный луч периодически сканирует, обегает экран, как правило с частотой 25 или 50 раз в сек. За цикл регенерации формируется изображение, которое может целиком или частично изменяться в реальном времени.

Для управления лучом на экране достаточно 3-х сигналов: , , которые определяют координаты светящейся точки на экране соответственно по координатам x и y, сигнал определяет яркость точки. Цвет элемента изображения на экране формируется из 4 сигналов: красного (R), зеленого (G), синего (В) и яркости или интенсивности (I).

Число пикселей определяет разрешающую способность графической системы и обычно выражается парой чисел (например, 1024´768). Здесь 768 – число строк, а 1024 – число столбцов.

На четкость изображения на экране существенное влияние оказывает размер точки, зерна или пикселя экрана. На мониторах стандартного размера в 14 дюймов удовлетворительное изображение получается для разрешения 640´480 при размерах зерна 0.39 мм, для разрешения 800´600 - при 0,31 мм, а для разрешения 1024´768 при размерах зерна 0,29 - 0,24 мм.


Видеоадаптеры
Каждому пикселю экрана ставится в соответствие атрибут пикселя - фиксированное количество битов в некоторой области адресного пространства центрального процессора персонального компьютера. Эта область называется видеопамятью, она является частью дисплейного адаптера (видеоадаптера).

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

Та видеостраница, которая постоянно обновляется в данный момент, называется текущей. Видеоадаптер способен выполнять переключение текущей видеостраницы.

Возможно одновременное существование видеопамяти 2-х или более областей одинаковой структуры. Каждая такая область содержит атрибуты всех пикселей экрана. Такие области называются страницами (видеостраницами).

В данный момент времени любая из страниц может отображаться в виде адаптера на дисплее, при этом занимается весь экран.

Наличие страниц позволяет из программы мгновенно менять изображение на экране, переключаясь с одной страницы на другую. Это дает также возможность проводить всю “черновую” работу по подготовке графического материала на отображаемой в данный момент странице, избегая появление на экране побочных графических эффектов.
2.2. Формирование изображения на экране монитора
Графическое изображение, формируемое на экране монитора, есть результат выполнения следующих действий:

1) атрибуты пикселей изображения должны быть загружены в память;

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

Кодировка стандартных цветов IBM PC
В персональном компьютере IBM PC используется большое число адаптеров: CGA, EGA, VGA, SVGA, HERCULES и другие.

Эти адаптеры могут работать в различных режимах (текстовых и графических), которые называется видеорежимами или видео модами (video modes).

Графические режимы адаптеров различаются:

1)разрешающей способностью;

2)количеством цветов;

3)количеством страниц видеопамяти и способом их адресации (разные адреса начала видеопамяти).



Обычно атрибут пикселя состоит из 1,2,4 или 8-ми бит. Все пиксели, имеющие одинаковое значение атрибута, отображаются на экране монитора одинаковым образом.


Атрибут, бит

Количество оттенков/цветов

1

2 (черно-белый)

2

4

4

16

8

256

------

------

N

2


оттенков (полутонов); n – число бит. Если каждый пиксель представляется n битами, то имеем оттенков.

Использование цвета
Цвет элемента изображения на экране формируется из 4-х сигналов: R, G, B, I.
Кодировка стандартных цветов IBM PC


I R G B

N

Цвет

0 0 0 0

0

черный

0 0 0 1

1

синий

0 0 1 0

2

зеленый

0 0 1 1

3

голубой

0 1 0 0

4

красный

0 1 0 1

5

розовый

0 1 1 0

6

коричневый(темно-желтый)

0 1 1 1

7

серый или белый

1 0 0 0

8

темно-серый или черный

1 0 0 1

9

ярко-синий

1 0 1 0

10

ярко-зеленый

1 0 1 1

11

ярко-голубой

1 1 0 0

12

ярко-красный

1 1 0 1

13

ярко-розовый

1 1 1 0

14

ярко-желтый или желтый

1 1 1 1

15

ярко-белый



2.3. Дисплейные адаптеры IBM PC и их графические режимы

CGA (Color Graphic Adapter) Первый цветной графический адаптер для IBM PC XT. Имеет 3 графических режима.

Разрешение: 320´200, 2 бит/пиксель. Имеет 4 цвета.

Разрешение: 640´200, 2 бит/пиксель. Цвет черно-белый.



EGA(Enhanad Graphic Adapter) Создан в 1984 г. одновременно с PC AT. Улучшенный цветной адаптер, поддерживает все режимы CGA и в этих режимах ведет себя точно также, включая распределение памяти.

В адаптере EGA добавлены новые графические режимы, в которых максимальное разрешение 640´350. Разрядность атрибута пикселя равно 4 битам, что позволяет иметь на экране 16 цветов.

Улучшенный цветной монитор, подключается к адаптеру EGA, может независимо задавать по 4 значения интенсивности для каждой цветовой компоненты.

Поэтому общее число допустимых цветов возрастает до 64. Цветовая палитра составляет любые 16 из допустимых 64 цветов.

Минимальная конфигурация адаптера 64 кб видеопамяти, она разделена на 4 банка по 16 кб. Это позволяет иметь одну страницу 640´200, 4 бит/атрибут; либо одну страницу 640´350, 2 бит/атрибут.

Часто EGA оснащают дополнительной видеопамятью до 128 либо 256 кб,

что позволяет иметь до 4-х страниц 640´200 либо до 2-х страниц 640´350.

VGA (Video Graphics Array) - это специальный разработанный адаптер фирмой IBM для PS/2. Основное отличие от других: переход к выдаче аналогового, а не цифрового сигнала на монитор.

Палитра цветов: 256. Максимальное разрешение: 640´480 пикселей при 16-ти цветах. Выборка палитры: 16 из 256 допустимых.

При разрешении 320´200 можно получить 256 цветов.

VGA поддерживает все режимы CGA и EGA.

Обеспечивая совместимость CGA на уровне прерываний BIOS, а с EGA на уровне прямой адресации памяти и прямой адресации портов адаптера.

Максимальная разрядность атрибута пикселя VGA равна 8 бит/пиксель.

Размер текущей палитры (количество одновременно присутствующих на экране цветов) зависит от установленного графического режима и может быть равен: 2, 4, 16, 256.

Монохромный дисплей VGA может отобразить до 64 градаций серого тона, разрешение при этом 720´350. Этот адаптер имеет видеопамять 256 кб. Видеопамять разделена на 4-х битовые плоскости по 64 К.

SVGA (Super VGA)

Разрешение: 800´600 - 256 цветов;

1024´768 - 16 цветов.

Поддерживает все режимы.

HERCULES - монохромный адаптер, имеет единственный графический режим, несовместимый ни с одним из графических режимов адаптеров IBM.

Разрешение: 720´348. Цвет оранжевый.
Графические режимы дисплея для персонального компьютера IBM PC


РЕЖИМ

ТИП

РАЗРЕШЕНИЕ ЭКРАНА

АДАПТЕР

4

Граф. 4 цвета

320´200

CGA,EGA

5

Граф. 4 серых тона

320´200

CGA,EGA

6

Граф. Черно-белая

640´200

CGA,EGA

10

Граф. 4 цвета

640´200

EGA

13

Граф. 16 цветов

320´200

EGA

14

Граф. 16 цветов

640´200

EGA

15

Граф. 4 цвета

640´350

EGA


3. ГРАФИЧЕСКИЙ ИНТЕРФЕЙС BGI (Borland Graphics Interface)
Перед использованием каких-либо функций графики, компьютер должен быть переведен в соответствующий видеорежим: должен быть выбран режим и палитра.

Графический интерфейс BGI состоит из 2-х компонент:



  1. постоянного ядра графической системы;

  2. набора графических драйверов (аппаратно-зависимая часть графической системы).

Ядро графической системы воспринимает все запросы прикладной программы на выполнение графических функций (оно не зависит от типа подключенного дисплейного адаптера).

Драйверы - программы, осуществляющие интерфейс между ядром графической системы и конкретным дисплейным адаптером.

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

Графические драйверы, входящие в систему Турбо Си содержатся в шести отдельных файлах с расширением .bgi.


Файлы графических драйверов .bgi


Имя драйвера

Размер файла

Адаптер

CGA. BGI

6253 байта

CGA

EGA. BGI

5363 байта

EGA, VGA

Hercules.BGI

6125 байта

Hercules

За каждым графическим драйвером закреплен постоянный номер, по которому ссылаются другие функции графической системы. Наряду с номером драйвера, можно использовать его символическое имя.


Номера и символические имена графических драйверов Turbo C


Номер драйвера

Символическое имя

Имя файла драйвера

1

CGA

CGA. BGI

3

EGA

EGA VGA. BGI

4

EGA 64

EGA VGA. BGI

5

EGA MONO

EGA VGA. BGI

7

HERC MONO

HERC. BGI

9

VGA

EGA VGA. BGI


Графические режимы, поддерживаемые драйверами Turbo С


номер режима

имя режима

размер страницы

кол - во цветов

кол - во страниц

0

1

2



3

4


CGACO

CGAC1


CGAC2

CGAC3


CGAHI

320´200

320´200


320´200

320´200


640´200

4

4

4



4

2


1

1

1



1

1


0

1


EGA LO

EGA HI


640´200

640´350


16

16


4

2


0

1


EGA 64 LO

EGA 64 HI



640´200

640´350


16

4


1

1


0

HERCMONO

720´345?

2

2

0

1

2



VGALO

VGAMED


VGAHI

640´200

640´350


640´480

16

16

16



4

2

1





4. Библиотека графики Турбо Си graphics.lib
Использование графики TУРБО СИ — это многошаговый процесс:

  1. Нужно определить тип видеоадаптера.

  2. Установить режим работы видеоадаптера.

  3. Выполнить инициализацию графической системы в выбранном режиме.

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

По своему назначению функции делятся на несколько групп:



  1. Функции для подготовки графической системы (инициализации графического драйвера и графического режима) и перехода в текстовый режим.

  2. Функции для получения изображения на экране (функции для работы с растром точек, графические примитивы, управление цветом, вывод графических текстов, базовые функции доступа к видеопамяти).

  3. Функции для установки параметров графического изображения (вида штриховки, способа вычерчивания и толщины линий, размера текстовых символов.)

  4. Функции для определения параметров изображения.

Инициализация графического драйвера и графического режима


В системе программирования ТУРБО СИ все нужные определения (записи, константы) для графического модуля даны в файле graphics.h. и при выборе соответствующего режима он должен быть включен в программу директивой:

include "graphics.h";

или


include ;

Стандартные функции помещены в библиотеку graphics.lib, которые должны быть подключены в режиме OPTIONS.

Перед началом работы в графической программе на СИ должна быть выполнена инициализация графической системы. Должны быть указаны:


  • графический драйвер (GraphDriver или gd);

  • режим работы этого драйвера (GraphMode или gm).

Имена драйверов и режимов задаются в файле graphics.h. Имена драйверов и графических режимов были выше приведены в таблице.

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

Для выполнения инициализации в начале должна появиться следующая строка:
int GraphDriver = DETECT, GraphMode;

{

initgraph (&GraphDriver, &GraphMode, “путь к драйверу .bgi”),

}

initgraph - библиотечная функция, используется для инициализации графической системы. Ее третий параметр содержит маршрут для поиска графического драйвера. Если этот параметр имеет значение пусто “ ”, то функция драйвера должна быть на текущем диске в текущей директории.

Для перехода в текстовый режим используются две функции:



closegraph или restorecrtmode.

В первом случае для возвращения в графический режим (после его закрытия) нужна повторная инициализация, т.е. использование функции initgraph. Во втором случае возврат в графический режим можно осуществить с помощью библиотеки функций:



setgraphmode (<номер режима>).

Если переменной GraphDriver перед вызовом функции будет принадлежать значение DETECT или 0, то возвращается рекомендуемый для драйвера этого адаптера графический режим и аргумент GraphMode при этом игнорируется.

Процедуру автоматического выбора драйвера и режима можно обойти, если задавать явно переменным GraphDriver и GraphMod значение из таблицы.
# include

int GraphDriver = DETECT, GraphMode;

main()

{ initgraph(&GraphDriver, &GraphMode,’’ ’’);

{

< графические функции>

}

}
# include

iht gd,gm;

main( )

{

gd = 9; gm =2; (или gd =VGA; gm = VGAH)

initgraph ( &gd, &gm,’’ ’’);

<граф. функции>

restorecrtmode( );

<текстовый режим>

setgraphmode( );

<графический режим>

closegraph( );

}


РАБОТА С ГРАФИКОЙ В СИСТЕМЕ ПРОГРАММИРОВАНИЯ ТУРБО - СИ
В системе программирования ТУРБО СИ все необходимые определения для графического модуля даны в файле graphics.h и при работе с графикой он должен быть включен в программу директивой

#include

Стандартные функции для графической системы помещены в библиотеку graphics.lib, которая должна быть подключена в интегрированной среде ТУРБО СИ в режиме Options.

Кроме того, для нормальной работы в ТУРБО СИ во многих случаях необходимо дополнительно включить в программу

#include

#include

Используемые в системе программирования ТУРБО СИ графические функции по своему назначению делятся на несколько групп:



  1. функции для подготовки графической системы (инициализации графического драйвера и графического режима) и перехода в текстовый режим;

  2. функции для получения изображения на экране (функции работы с растром точек, графические примитивы, управление цветом, вывода графических текстов, базовые функции доступа к видеопамяти);

  3. функции для установки параметров изображения (вида штриховки, способа вычерчивания и толщины линий, размера текстовых символов, параметров окна и т. д.)

  4. функции для определения параметров изображения.




За начало координат экрана x=0, y=0 принимается его левый верхний угол.

Значение x определяет число точек, на которые смещается вправо от начала координат указатель текущей позиции (УТП) экрана.

Значение y определяет аналогичное смещение вниз.

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

Угловые величины задаются в градусах.

Для указания типа заполнителя используются цифровые константы 0,1,...,12.

Для указания стиля линии служат цифровые константы от 0 до 4.







Целые числовые константы

Тип заполнителя

0,1,.....,12

Стиль линии

0,1,.....,4

Толщина линий

1,3

Тип текстовых шрифтов

0,1,.....,4

Направление текста

0,1

Размер символа устанавливаемого

пользователем



0

Разравнивание текста

0,1,2

Для задания операций с точками разных изображений, используемых при их совмещении, введены константы:


0 (COPY - PUT) - для простого перемещения изображения на экран;

1 (XOR - PUT) - наложение с выполнением операции ’’исключающие ИЛИ’’;

2 (OR - PUT) - наложение с выполнением операции ’’ИЛИ’’;

3 (AND - PUT) - наложение с выполнением операции ’’И’’;

4 (NOT - PUT) - перемещение изображения с отрицанием (инверсией).

В графических функциях языка СИ применяются записи и константы, определенные в файле graphics.h.

Используются записи:

Strukt linesettingstype { /*параметры линии*/

Int linestyle; /*стиль линии*/

Unsigned upattern /*битовый образ примитива линии из 16 точек . */

Int thickness; }; /*толщина*/

Strukt textsettingstype { /*параметры текста*/

Int font; /*шрифт*/

Int direction; /*направление*/

Int charsize; /*размер символа*/

Int horiz; /*выравнивание по горизонтали*/

Int vert; }; /*выравнивание по вертикали*/

Strukt fillsettingstype { /*параметры заполнения*/

Int pattern; /*наполнитель*/

Int color; }; /*цвет*/

Strukt palettetype { /*данные о текущей палитре*/

Unsigned char size; /*число цветов в палитре*/

Signed char colors [MAXCOLORS+1]; }

Константа MAXCOLORS в настоящий момент определена равной 15.



Strukt pointtype { /*координаты точки*/

Int x,y; };

Strukt viewporttype { /*параметры экрана*/

Int left, top, right, bottom ;

Int clip; }; /*отсечение, (1)-отсекать,(0)-нет.

Strukt arccoordstype { /*параметры дуги*/

Int x, y; /*координаты центра дуги*/

Int x start, y start, x end, y end;}/*координаты начала и конца дуги*/
1) стиль линии

0 сплошная

1 пунктир

2 штрих - пунктир

3 штриховая

4 тип линии, заданной пользователем

2) толщина линий

1 толщина в 1 пиксель

3 толщина в 3 пикселя

3) тип текстовых шрифтов

0 шрифт 8´8 бит( - )

1 утроенный шрифт(TRIP.CHR)

2 малый шрифт(LITT.CHR)

3 шрифт sans-serif(SANS.CHR)

4 готический шрифт(GOTH.CHR)

4) направление текста

0 горизонтальное

1 вертикальное

5) выравнивание текста

0 относительно левого края по вертикали/нижнего края по горизонтали

1 относительно центра


  1. относительно правого края по вертикали/верхнего края по горизонтали

ГРАФИЧЕСКИЕ ПРИМИТИВЫ


Графические функции языка СИ для получения изображения

на экране дисплея

line(x1,y1,x2,y2); - рисует линию;

x1,y1 - координаты начала линии,

x2,y2 - координаты конца линии.

Вид линии можно задать с помощью функции



setlinestyle(<стиль линии>,<образец>,<толщина>);

если<стиль>=0,1,2,3, то <образец>=0,

если<стиль>=4, то вид линии конструирует пользователь из примитивных отрезков длиной 16 точек.

Linerel(x, y); - рисует линию по заданным приращениям;

x, y - приращения, которые добавляются к текущей точке (целые числа).

Lineto(x, y); - рисует линию из текущей точки в точку с заданными координатами;

x, y - координаты точки, в которую проводимая линия из текущей точки.

Arc(x, y,j1,j2,r); - вычерчивает дугу;

x, y - координаты центра дуги,

j1,j2 - углы (в градусах),

r - радиус (точки экрана).

Bar(x1, y1, x2,y2); - рисует закрашенный прямоугольник;



x1, y1 - координаты верхнего левого угла,

x2, y2 - координаты нижнего правого угла.

Bar 3d(x1, y1, x2, y2, глубина, p); - рисует прямоугольный параллелепипед с закрашенной лицевой гранью;

x1, y1 - координаты верхнего левого угла,

x2, y2 - координаты нижнего правого угла,

глубина - величина 3-го измерения,

p =1 - верхняя грань присутствует, p=0 - присутствует.

Вид и цвет наполнителя, т.е. чем будет закрашиваться лицевая грань параллелепипеда, может быть задан функцией:



setfillstyle(тип наполнителя, цвет);

circle(x, y, r); - рисует окружность;

x, y - координаты центра окружности,

r - радиус (задается в точках экрана).



drawpoly(количество вершин, (int far*)m); - рисует многоугольник;

m - массив записей, в котором определены координаты x и у всех вершин многоугольника.

Например, для треугольника:

struct xy {int x, y;} m[4];

m[0].x=10; m[0].y=10;

m[1].x=30; m[1].y=20;

m[2].x=20; m[2].y=40;

m[3].x=10; m[3].y=10;

Координаты начальной и конечной точек совпадают.



ellipse(x, y ,j1,j2, rx, ry); - рисует эллипс;

x, y - координаты центра эллипса,

rx - горизонтальный радиус,

ry - вертикальный радиус.

Fillellipse(x, y, rx, ry); - рисует и заполняет эллипс, используя текущий наполнитель.

Вид и цвет наполнителя задаются функцией:



setfillstyle(...);

fillpoly(4,(int far*)m); - рисует многоугольник и заполняет его текущим наполнителем. 4 – число вершин +1.

Вид и цвет наполнителя задается функцией



setfillstyle(...);

floodfill(x, y, p); - заполняет установленным ранее наполнителем области экрана, в которую попадает точка с координатами(x, y);

p - цвет линии, ограничивающей эту область и до которых осуществляется заполнение.

Вид и цвет наполнителя задается функцией

setfillstyle(...).

moveto(x, y); - для невидимого перемещения УТП в новую точку с заданной координатой;

x, y - координаты точки, куда перемещается УТП.

Moverel(x, y); - для невидимого перемещения УТП в новую точку по заданным приращениям;

x, y - те приращения, которые прибавятся к текущей позиции.

Rectangle(x1, y1, x2, y2); - рисует прямоугольник;

x1, y1 - координаты верхнего левого угла,

x2, y2 - координаты нижнего правого угла.

Sector(x, y, j1, j2, rx, ry); - рисует и заполняет сектор эллипса;

x, y - координаты центра эллипса,

j1 - угол начала,

j2 - угол конца.

Pieslice(x, y, j1, j2, r); - сектор круга;

x, y - координаты центра,

j1 - угол начала,

j2 - угол конца,

r - радиус.

Putpixel(x, y, p); - выводит точку;

x, y - координаты точки, куда выводится точка,

p - определенный цвет (0,1,...,15).

Outtext(char far*ts) - выводит на экран дисплея текстовую строку, на которую указывает ts;

Например, вызов функции outtext (“ОПУ кафедра АиУТС”) приведет к выводу на экран строки:

“ОПУ ...”

начиная с текущей точки.

То же самое можно получить, если в программе использовать следующие объявление и вызов функции:

char ts[]=’’ОПУ ...’’;

outtext(ts);

outtextxy(x, y, char far*ts) - выводит на экран текстовую строку, на которую указывает ts;

x, y - координаты, определяющие местоположение на экране выводимой строки.

Putimage(x левой границы, y верхней страницы, void far*bm, операция) - выводит сохраненное графическое изображение в окне экрана;

bm - указатель на область памяти, где хранится графическое изображение.

Указатель bm можно объявлять так: void*bm;.

Операция - это константа (0,1,2), определяющая способ наложения выводимого окна на другое изображение экрана.

0 - простое наложение сохраненного изображения на изображение, которое было на экране;

1 - вывод с инвертированием;

2 - вывод с выполнением операции исключающего ИЛИ.

Сохранение изображения в окне размером 100´100 точек от начала экрана осуществляется следующим образом:

int s;

s=imagesize(0, 0, 100, 100);

bm-mallos(s);

getimage(0, 0, 100, 100, bm);

Здесь s - объем буфера для изображения;



mallos - библиотечная функция языка СИ для выделения памяти объемом в s байт;

imagesize(x1, y1, x2, y2) - возвращает значение объема буфера (в байтах) для сохранения графической информации в окне экрана заданного размера.

Getimage(x1,y1,x2,y2,void far* bm) - позволяет получить и сохранить в области памяти, на которую указывает bm, окно экрана с заданным размером.

Cleardevice(void) - очищает графический экран.

Cleaviewport(void) - очищает ранее установленное окно графического экрана (задается функцией setviewport(...)).

Setviewport(x1,y1,x2,y2,p); - устанавливает размер окна экрана, куда будет выводиться изображение;

x1, y1 - координаты левой верхней границы,

x2, y2 - координаты правой нижней границы,

p=1 - изображение за пределами окна отсекается,

p=0 - не отсекается.
Функции для установки параметров изображения на экране дисплея
Graphdefaults( ) - сбрасывает все графические установки в первоначальное состояние, заданное по умолчанию.

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

Номера страниц:

для EGA - адаптера 0,1,2,3 для режима 640´200,

0,1 - для режима 640´350;

для VGA - адаптера 0,1,2,3 для режима 640´200 точек,

0,1 - для режима 640´350,

0 - 640´480.

Setvisualpage(номер страницы) - устанавливает страницу, содержимое которой будет выводиться на экран дисплея.

Setaspectratio(x, y) - устанавливает масштабные коэффициенты по горизонтальной(x) и вертикальной(y) осям. Это необходимо для того, чтобы задать правильную форму кривых типа окружностей и дуг (на экране дисплея горизонтальные и вертикальные линии, содержащие одинаковое число точек, могут иметь неодинаковую длину). По умолчанию задано x=10000. Для построения правильных фигур следует выбирать y=10000.

Setcolor(номер цвета) - устанавливает цвет графических образов (линий);

n - номер цвета (целое число - 0,1,2,....,15).



Setbkcolor(n) - устанавливает цвет фона.

Setfillstyle(номер наполнителя, номер цвета) - устанавливает стиль наполнителя(0,1,2,....,12).

Setlinestyle(стиль линии, образец битового базового отрезка, толщина) - устанавливает стиль линии, который может принимать значения 0,1,2,3 при этом второй параметр принимает значение 0. По толщине линия может быть нормальной(0) и толстой(3).

Settextstyle(шрифт, направление, размер символа) - устанавливает стиль текста.

Параметр “шрифт” может принимать значение 0,1,2,3,4.

Второй параметр - 0,1 (0 - для горизонтального направления текста, 1 - для вертикального направления текста).

Размер - это цифра, показывающая во сколько раз увеличивается его величина. Если эта цифра 0,— то размер задается пользователем с помощью функции setusercharsize.



Setusercharsize(mx, dx, my, dy) - пользователь устанавливает размер символа (изменение по горизонтали в раз и по вертикали в раз). В случае изменения размера параметр ’’шрифт’’ в предыдущей функции не должен принимать значение 0.

Setpalette(старый номер, новый номер) - изменяет в текущей палитре один цвет на другой по их номерам.

Settextjustify(по горизонтали, по вертикали) - устанавливает выравнивание текста (0,1,2).

Setgraphbufsize(n) - изменяет размер внешнего графического буфера; может быть вызвана перед функцией initgraph; возвращает предыдущее значение объема внешнего буфера;

n - беззнаковое целое число - размер буфера.

Setgraphmode(n) - устанавливает режим работы графического адаптера;

n - номер режима.

Setvisualpage(n) - устанавливает страницу, содержимое которой отображается на экране дисплея;

n - номер страницы.



Setwritemode(n) - устанавливает режим вычерчивания линий.

n - номер режима:

если n=0 - новые линии накладываются на старое изображение;

n=1 - между точками новой линии и имеющимися на экране изображением выполняется операция исключающее ИЛИ.

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



Setviewport(x1,y1,x2,y2,p) - устанавливает размер окна экрана, куда будет

выведено изображение;



p=1 - изображение за пределами окна отсекается;

p=0 - не отсекается.
Функции для получения параметров изображения
Графический драйвер и режим.

Detectgraph (int far*gd, int far*gm); - позволяет определить графический драйвер (*gd) и режим(*gm).

Getdrivename (void) – возвращает указатель на строку с именем графического драйвера (переменная, которой будет присваиваться значение этой функции, должна иметь тип char).

Getgraphmode(void) – возвращает номер режима отображения графической информации.

Getmodename (int m) – возвращает указатель на строку с именем графического режима по его номеру m.

Getmaxmode(void) – возвращает наибольший номер графического режима для текущего драйвера.



Getmoderange (int gd, int far*l, int far*h) – возвращает диапазон значений возможных режимов(от*l до *h) для драйвера gd;

Цветовая палитра.

Getpalette(struct palettetype far*p) – позволяет получить информацию о текущей палитре.

Getpalettesize (void) – возвращает число цветов в одной палитре;

Getfillsettings(struct fillsettings type far*ff) – возвращает значения параметров заполнения цвета экрана, являющихся элементами записи *ff типа fillsettingstype.

Getmaxcolor(void) – возвращает максимальное число цветов.

Getpixel (x, y) – возвращает номер цвета точки с координатами x, y;

Getbkcolor(void) – возвращает номер текущего цвета фона.

Getcolor(void) - возвращает номер текущего цвета линий.
Указатель текущей палитры

Getmaxx(void) – возвращает размер экрана в точках по горизонтали.

Getmaxy(void) – возвращает размер экрана в точках по вертикали.

Getx(void) - возвращает значение координаты x (в точках) для указателя текущей позиции.

Gety(void) - возвращает значение координаты y (в точках) для указателя текущей позиции.

Окна

Getviewsettings(struct viewporttype far*v) - возвращает значения параметров окна, являющихся элементами записи v типа viewporttype (отсекается изображение за пределами графического окна и изображение не отсекается).

Imagesize(x левой границы, y верхней границы, x правой границы, y нижней границы) - возвращает значение объема буфера (в байтах) для сохранения графической информации в окне экрана заданного размера.

Getimage(x левой границы, y верхней границы, x правой границы, y нижней границы, void far*bm) – позволяет получить и сохранить в области памяти, на которую указывает bm, окно экрана с заданным размером.
Линии дуги

Getlinesettings(struct linesettingstype far*ll) - возвращает значения параметров линии, являющихся элементами записи *ll типа linesettingstype.

Getarccoords(struct arccoordstype far*dug) - возвращает значения координат дуги, являющихся элементами записи*dug типа arccoordstype.

Getaspectratio(int far**, int far*y) – позволяет получить коэффициенты() привидения линий по координатам x и y к одинаковой длине.
Шрифт

Gettextsettings( ) – параметры текста – элементы записи tt типа textsettingstype.

Textheight(char far*t) - возвращает значение высоты символа(в точках), передаваемого в виде параметра.

Textwidth(char far*t) - возвращает значение ширины символа(в точках), передаваемого в виде параметра.
Ошибки

Graphresult(void) – возвращает номер ошибки(целое число от –14 до –1 и –18); значение 0 говорит об отсутствии ошибки.

Grapherrormsg(int error) – возвращает указатель на строку с наименованием возможной ошибки по ее номеру error.
Буфер

Graphfreemem(void far*p, unsigned размер памяти) – освобождает блок памяти заданного размера (в байтах) из области памяти, на которую указывает p.

Graphgetmem(unsigned размер памяти) – выделяет блок памяти заданного размера (в байтах) и возвращает указатель на его начало(является аналогом функции malloc для графической библиотеки).
Пример 1.

Рассмотрим программу на языке СИ, использующую различные функции для получения параметров изображения.


Вписать программу.

Сначала указатель текущей позиции перемещается в точку (150,200) и определяются ее координаты(xm, ym). Потом вычерчивается дуга и линией соединяются ее начало и конец. Соответствующие координаты определяются с помощью функции getarccoords. Далее вычерчивается квадрат без использования и с использованием коэффициента приведения с помощью функции getaspectratio.

В первом случае квадрат на экране будет представлен как прямоугольник, во втором он будет иметь правильную форму.

Применение подпрограмм для получения информации из полей различных записей продемонстрировано на примере функции getviewsettings (после функции printf). Здесь же показано, как выделять(graphgetmen) и освобождать(graphfreemem) память. Определяются и выводятся на экран дисплея различные параметры графического изображения.


Пример 2. Использование функции getfillpattern.

#include /*пример 8 */

#include

main( )

{ int dg=DETECT, gm, i, j;

char cif, p[]={0, 0, 0FC, 044, 030, 030, 044, 0FC};

initgraph (&gd, &gm, “ ”);

setfillpattern (p, 14); /* желтый цвет (14)*/

/* вычерчивание эллипса и его заполнение заданным наполнителем */

fillelipse (320, 100, 200, 50);

/* получение байтов с информацией о наполнителе */

getfillpattern (p); delay (2000);

closegraph( );

/* вывод битовой матрицы для введенного наполнителя и шестнадцатеричных чисел, соответствующих ее строкам */

puts (“\t \t МАТРИЦА ЗАПОЛНЕНИЯ \n”);

for (i=0; i<8; i++)

{ printf (“шестнадцатеричное число” “– %2x; двоичное число – “, p[i]);

for (j=7; j>=0; j--)

printf (“%d %c”, (cif=(p[i]>>j)&1, cif), (j = = 0) ? ’\n’:’ ‘);

}

getch( );

}

В качестве наполнителя используется знак . Им заполняется площадь внутри эллипса. Выводится 16–ричные числа для всех байтов наполнителя и соответствующая битовая матрица.





0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

1

1

1

1

1

1

0

0

0FC

0

1

0

0

0

1

0

0

044

0

0

1

1

0

0

0

0

030

0

0

1

1

0

0

0

0

030

0

1

0

0

0

1

0

0

044

1

1

1

1

1

1

0

0

0FC



  1. ПрограмМИРОванИЕ формИРОВАНИЯ графИчЕСКих образОв

СРЕДСТВАМИ Турбо СИ
Управление видеостраницей
Многие адаптеры сразу позволяют хранить в видеопамяти сразу несколько страниц, которые нумеруются, начиная с 0.

Страница, отображаемая в данный момент на экране, в ТУРБО СИ называется видимой.

Страница памяти, на которую выполняется вывод графической информации, называется активной.

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

ТУРБО СИ имеет в своем составе 2 функции для переключения страниц:

setactivepage(p);

setvisualpage(p);

p - номер видеостраницы.
#include’’conio.h’’

#include’’graphics.h’’

#include’’stdio.h’’

main( )

{

int gd=detect,gm,i;

initgraph(&gd,&gm,’’ ’’);

setactivepage (1);

for (i=0;i<=15;i+ +)

{

setcolor(i);

circle(320,100,i*6);

}

setactivepage(0);

do{

outtextxy(50,0,’’Введите номер активной страницы:0 или 1(2-

завершение работы)’’);

scanf(’’%d’’,&i);

setvisualpage(i);

}while(i!=2);

closegraph( );

}

По умолчанию, активизируется страница с номером 0, и она же отображается на экране. Функция setactivepage(1) активизирует страницу с номером 1. Теперь в нее будут заноситься создаваемые графические образы, однако они не будут видны на экране.

Чтобы сделать первую страницу видимой, необходимо вызвать функцию setvisualpage(1). Изменяя значение аргумента этой функции, можно мгновенно обновлять содержимое экрана, просматривая различные страницы.
Сохранение изображения в буфере. Запись изображения

из буфера в файл
Пример программы на языке СИ, которая строит на экране дисплея 3 вложенные окружности белого, зеленого и голубого цветов (функция setcolor). Затем изображение левого верхнего угла экрана размером 100´100 точек сохраняется в файле ecran.f, который создается на текущем диске.

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

/*Пример1. Сохранение изображения в буфере.*/

/*Запись изображения из буфера в файл*/



#include

#include

#include

main( )

{

file*fopen( ), *fp;

int gd=detect, gm, s, i;

void*mallos( );/ * объявляется файл malloc для динамического выделения памяти*/

unsigned char*bm;/ *указывает на буфер для сохранения изображения*/

initgraph(&gd,&gm,’’ ’’);

circle(100,100,50);

setcolor(2);

circle(100,100,30);

setcolor(3);

circle(100,100,10);

/*открытие файла ecran.f для записи(’’w’’) */

fp=fopen(’’ecran.f’’,’’w’’);

/*определение объема буфера (в байтах) для изображения*/

s=imagesize(0,0,100,100);

/*выделение памяти объемом s байт*/

bm=malloc(s);

/*сохранение изображения размером 100´100 точек в буфере, на который указывает bm*/

getimage(0,0,100,100,bm);

/*запись изображения из буфера в файл ecran.f*/

for(i=0;i

fprintf(fp, ’’%x’’, *(bm+i));

/*закрытие файла ecran.f*/

fclose(fp);

closegraph( );

}
Чтение изображения из файла. Вывод изображения из буфера на экран
#include

#include

#include

main( )

{file*fopen( ), *fp;

int gd=detect, gm, s, i;

void*malloc( );

unsigned char*bm;

imtgraph(&gd,&gm,’’ ’’);

/*открытие файла ecran.f для чтения(’’r’’) */

fp=fopen(’’ecran.f’’,’’r’’);

s=imagesize(100,100,200,200);

bm=malloc(s);

/*чтение сохраненного ранее изображения из файла ecran.f*/

for(i=0;i

fscanf(fp, ’’%x’’, bm+i);

/*закрытие файла ecran.f*/

fclose(fp);

/*вывод изображения из буфера, на который указывает bm в область экрана с координатами(100,100). Операция 0 задает простое копирование изображения*/

putimage(100,100,bm,0);

closegraph( );

}

Последний параметр функции putimage( ) задает операцию с изображением. Например, если 0 поменять на 4, изображение будет проинвертировано.

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

Так, если задана операция И, фигуры на экране будут возникать только там, где точки нового и старого изображений совпадут.


Операции с текущим изображением при выводе

изображения из буфера
putimage(x, y, bm, n);

n=0 - простое копирование изображения(COPY_PUT)

n=4 - копирование про инвертированного изображения(NOT_PUT)




Имя операции

Действие

0

COPY_PUT

Копирование

1

XOR_PUT

Исклющее ИЛИ

2

OR_PUT

Или

3

AND_PUT

И

4

NOT_PUT

Инверсия

Сначала друг под другом выведем два прямоугольника. Затем фрагмент с нижним прямоугольником запоминается в буфере, на который указывает buf.

После этого он начинает накладываться с использованием различных логических операций на фрагмент с верхним прямоугольником.

В верхней части экрана отображается текстовая информация о выполняемой операции.

Смена различных изображений производится через 2с (delay(2000)).

Далее демонстрируется функция setwritemode.

По умолчанию, установлен 0 режим, и новое изображение накладывается на старое (так же, как и при операции ИЛИ). Если задать 1-ый режим, наложение выполняется с использованием операции искл. ИЛИ (общие линии разных изображений будут пропадать).
#include ’’stdio.h’’

#include ’’graphics.h’’

main( )

{int gd=detect, gm, s, i;

void*malloc( ), *buf;

char*text;

initgraph(&gd, &gm,’’ ’’);

for(i=0; i<=4; i+ +)

{rectangle(300, 40, 340, 80); /*верхний прямоугольник */

rectangle(310, 140, 330, 180); /*нижний прямоугольник */

s=imagesize(290, 130, 350, 200);

baf=malloc(s)

/* сохранение изображения с нижним прямоугольником в буфере на который указывает buf */

getimage(290, 130, 350, 200, buf);

/* установка выравнивания по центру выводимого текста */

settextjustify(1,1);

delay(20000);

/* выбор текста для выполняемой операции в putimage */

switch(i)

{case 0: text = ’’ простое копирование’’; break;

case 1: text = ’’ операция искл. ИЛИ ’’; break;

case 2: text = ’’ операция ИЛИ ’’; break;

case 3: text = ’’ операция И ’’; break;

case 4: text = ’’ инверсия изображения ’’; break;

}

/* отображения текста о выполняемой операции */

outtextxy(320, 5, text);

/* вывод сохраненного изображенbя с операцией i

putimage(290, 30, buf, i);

delay(2000);

cleardevice( ); /* очистка экрана */

}

outtext(320, 5, исключающее ИЛИ );

/* установка операции исключающее ИЛИ */

setwritemode(1);

rectangle(300, 80, 340, 120);

rectangle(310, 80, 330, 120);

delay(2000);

cleardevice( ); /* очистка экрана */

outtextxy(320, 5, “Сброс операции Иисключающее ИЛИ” );

/* Сброс операции Иисключающее ИЛИ */

setwritemode(0);

rectangle(300, 80, 340, 120);

rectangle(310, 80, 330, 120);

delay(2000);

closegraph( );

}



ОБРАБОТКА ОШИБОК СИСТЕМЫ ГРАФИКИ ТУРБО СИ
Защищенное от ошибок построение программы требует использования функции graphresult( ) после любого обращения к функциям detectgraph ( ) и initgraph ( ).

Функции обработки ошибок, сообщающих внутренние коды ошибок графической библиотеки graphresult( ) или формирующей строку диагностического сообщения grapherrormsg( ).

Описания функций обработки ошибок:

#include

int far graphresult(void)

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


Таблица. Коды ошибок, возвращаемые при выполнении функций графической библиотеки ТУРБО СИ.


GrOk

0

Отсутствие ошибки

GrNoInitGraph

-1

Графический интерфейс(.BGI- драйвер) не инсталлирован. Следует выполнить initgraph( )

GrNotDetected

-2

Не обнаружен видеоадаптер, способный работать в запрошенном (или любом в случае DETECT) графическом режиме.

GrFileNotFound

-3

Не найден по заданному маршруту и в текущей директории .BGI- файл.

GrInvalidDriver

-4

Заданный в качестве .BGI- драйвера файл не соответствует стандарту ТУРБО СИ.

GrNotLoadMem

-5

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

GrNoScanMem

-6

Нехватка памяти при выполнении графических функций.

GrNoFloodMem

-7

Нехватка памяти при выполнении графических функций заполнения.

GrFontNotFound

-8

Не найден файл описания шрифта.

GrNoFontMem

-9

Отсутствие памяти для загрузки файла шрифта.

GrInvalidMode

-10

Недопустимый графический режим для выбранного .BGI- драйвера.

GrError

-11

Ошибка функции графики.

GrIOerror

-12

Ошибка ввода-вывода в графическом режиме.

GrInvalidFont

-13

Файл шрифта, не соответствующий стандарту Borland International

GrInvalidFontNum

-14

Недопустимый номер шрифта.

GrInvalidDeviceNum

-15

Недопустимый номер устройства.

GrInvalidVersion

-18

Недопустимый номер версии .BGI- драйвера (.BGI- драйвер для ТУРБО СИ).

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



Пример:

#include

#include

#include

int main(void)

{int graph_driver, graph_mode, graph_error_code, modes, x, y, lomode, himode;

char string[81];

graph_driver =Detect;

initgraph(&graph_driver, &gfaph_mode, ’’d : //te//bgi’’);

graph_error_code =graphresult( );

it(graph_error_code !=grOk)

prinf(’’ Ошибка системы графики ТУРБО СИ : %s’’, grapherrormsg(graph_error_code));

x = getmaxx( )/2;

y =getmaxy( )/2;

settextjustify( Center_Text, Center_Text);

/*Определение имени .BGI- драйвера и вывод его на экран */

sprintf(string, ’’ Использ. Драйвера : %s’’, getdrivername( ));

outtextxy(x, y, string);

/*Получение информации о режимах и вывод ее на экран */

getmoderange(graph_driver, &lomode, &himode);

sprintf(string, ’’ Драйвер поддерживает %d режимов’’, getmaxmode( )+1);

outtextxy(x,y+textheight(’’A’’),string);

outtextxy(x,y+2*textheight(’’A’’),’’ Нажмите любую клавишу’’);

getch( );

/*Цикл переключения режимов от самого младшего к старшему */

for(modes=lomode; modes<=himode; modes+ +)

{setgraphmode(modes);

x=getmaxx( )/2;

y=getmaxy( )/2;

settextjnstify(Center_Text, Center_Text);

sprintf(string, ’’ Установлен режим %s,’’ getmodename(modes));

outtextxy(x, y, string);

outtextxy(x, y+textheight(’’A’’),’’ Нажмите любую клавишу’’);

getch( );

}

closegraph( );

}


БИБЛИОТЕКА ФУНКЦИЙ PCX. ПАКЕТ PCX programmer toolkit.
Пакет программ PCX позволят разработчикам графических программ создавать приложения, обладающие средствами показа, сохранения, печати и манипулировать изображениями формата PCX.

Для подключения библиотеки PCX в пользовательские программы необходимо подключить header – файл ’’pcxlib.h’’. В директории LIB инструментальной системы программируемой СИ должна быть расположена библиотека pcx_cl.lib.

Основные функции библиотеки PCX обеспечивают работу с буферами, файлами, дисплеями, текстовыми экранами.




1.Функция pcx DisplayBuffer.

Char *buffer;

Int bufmax, x1, y1, x2, y2, page ;

Int far pcx DisplayBuffer(buffer, bufmax, x1, y1, x2, y2, page);

Сохраняет область экрана в буфере изображения. Этот буфер может быть либо переотображен в новое место либо записан на диск. Это необходимо для сохранения области используемой для изображения, которое выводится на экран при отображении окон или меню, либо просто для сохранения экрана.

2.Функция pcx BufferFile.

Сохраняет буфер изображения в файле PCX. Буфер может быть предварительно загруженным из файла PCX, или должен содержать сохраненную область экрана.



char*buffer;

int bufsize;

char*filename;

int far pcx BufferFile(buffer, bufsize, filename)

3.Функция pcx DisplayFile.

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

4. Функция pcx FileBuffer.

Загружает файл изображения в формате PCX в некоторый буфер изображения. Буфер должен быть большим, для того чтобы загрузить целиком весь файл. Из буфера изображение может быть выведено на дисплей.

char*filename, *buffer;

int bufmax;

int far pcx FileBuffer(filename, buffer, bufmax);

5. Функция pcx BufferDisplay.

Отображает предварительно загруженный или сохраненный буфер изображения в формате PCX. Тип буфера должен соответствовать текущему установленному Типу дисплея, иначе буфер может отображаться некорректно. Буфер отображается на указанную страницу(page), в область с указанными координатами(x, y).

char*buffer;

int bufsize, x, y, page;

int far pcx BufferDisplay(buffer, bufsize, x, y, page);

6.Функция pcx FileDisplay.

Загружает файл изображения в формате PCX прямо на дисплей. Это может быть использовано для любых PCX – изображений, особенно в том случае, когда загружаемые изображения больше доступных буферов.

char*filename;

int x, y, page;

int far pcx FileDisplay(filename, x, y, page);

7. Функция pcx GetDisplay.

Возвращает текущий тип дисплея, предварительно установленный при помощи функции pcx SetDisplay.

Int far pcx GetDisplay( );

8. Функция pcxSetBuffer.

Определяет некоторый буфер, для работы с ним с использованием пакета PCX. Буфер инструментального пакета используется для отображения изображений из файлов и в файлы. Большие буферы значительно ускоряют операции отображения, так как снижается количество обращений к диску.

char*buffer;

int bufmax;

int far pcx SetBuffer(buffer, bufmax);

9.Функция pcx TextBuffer.

Сохраняет отображаемый текстовый экран в буфере, для последующего восстановления при помощи функции pcx BufferText.

Используется, когда текстовый экран сохраняется перед переходом в графический режим при помощи функции pcx SetMode. Буфер должен быть по крайней мере равным 4096-ти байтам, для текстового экрана 80´25, и 8192-байтам для экрана VGA - 80´50.



char*textbuf;

int far pcx TextBuffer(textbuf);

10. Функция pcx BufferText.

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

Char textbuf;

Int far pcxBufferText(textbuf);

Пример:


Char textbuf[4096];

Retcode=pcxBufferText(textbuf);

11. Функция pcx SetDisplay.

Должна быть вызвана перед тем, как будут использованы другие функции инструментального пакета. Она устанавливает тип дисплея, для будущего использования вызовов функций данного пакета, но не делает установку режима. Этот вызов может быть сделан более чем один раз, если изменяется тип дисплея или режим.

Int disptype;

Int far pcx SetDisplay(disptype);

Аргумент disptype может быть одной из следующих констант.

PCXEGA_10=EGA (640´350´16)

PCXEGA_12=VGA (640´480´16)

PCXEGA_13=VGA (320´200´256)
Примеры использования функции библиотеки PCX
Пример 1. Сохранить область экрана от точки(10,10) до(20,20) и отобразить в новое место с координатами(50,100).

# define bufmax 10000

char buffer [bufmax];

int bufsize;

main( )

{ bufsize=pcxDisplayBuffer (buffer, bufmax, 10, 10, 20, 20, 0);

if (bufsize>0) zetcode=pcxBufferDisplay (buffer, bufsize, 50, 100, 0);

}



Пример 2. Загрузить файл в буфер и отобразить буфер в область с координатами(100,200) на страницу с номером 0.

# define bufmax 10000

char buffer [bufmax];

int bufsize;

bufsize=pcxFileBuffer (“pcxTest.pcx”, buffer, bufmax);

if (bufsize>0)

{retcode=pcxBufferDisplay (buffer,bufsize, 100, 200, 0);

}



Пример 3. Использование функции установки пакета PCX в режим pcxVGA_12 - 620´480´16.

If ((retcode=pcxSetDisplay (pcxVGA_12)) = = pcx SUCCESS)

{ret code = pcxSetMode (pcx GRAPHICS);

}

Пример 4. Вывод изображения в формате PCX.

#include

#include

#include


int pcxtype=pcxVGA_12;

char pcximage[ ]= ”img1.pcx”;

char pcxpal[800];

main( )

{ int retcode;

if ((retcode=pcxSetDisplay (pcxtype)) = = pcxSUCCESS)

{ if ((retcode=pcxSetMode (pcxGRAPHICS)) = = pcxSUCCESS)

{if ((retcode=pcxGetFilePalette (pcxtype, pcximage, pcxpal)) = = pcxSUCCESS)

{if ((retcode=pcxSetDisplayPalette (pcxpal)) != pcxSUCCESS)

{ printf (“pcxSetDisplayPalette error: %d \n”, retcode);

}

printf (“pcxGetFilePalette error: %d \n”, retcode);

}

if ((retcode=pcxFileDisplay (pcximage, 0, 0, 0)) != pcxSUCCESS)

{ printf (“pcxFileDisplat error: %d \n”, retcode);

}

}

}

else

{printf (“pcxSetMode error: %d \n”,retcode);

}

else

{printf (“pcxSetDisplay error: %d \n”, retcode);

}

}

Структура файла формата PCX
Файл формата PCX состоит из заголовка длиной 128 байт и графического изображения, сжатого методом RLE.

Заголовок PCX файла можно описать на языке ТУРБО-СИ следующим образом.



PCXHeader{

Char PCXId;

Char VersionNo;

Char Encoding;

Char BitsPerPixel;

Int XL, YL;

Int XH, YH;

Int XRes, YRes;

Char Palette[1][48];

Char Reserved;

Char NPlanes;

Int ButesPerLine;

Int PaletteInfo;

Char Reserved2[1][58];

}

Поле PCXId всегда содержит значение OAh. Отсутствие этого признака означает, что данный файл не является файлом формата PCX. Поле VersionNo содержит номер версии PCX формата. Поле Encoding содержит признак метода сжатия изображения. Во всех версиях формата, разработанных до сих пор, этот признак равен единице, что означает, что изображение сжато методом RLE.



Поля XL, YL, XH, YH определяют координаты левого верхнего и правого нижнего углов изображения. XRes, Yres в случае изображения для видео экрана содержат количество пикселов по горизонтали и вертикали для всего экрана. В случае же изображения, построенного для принтера они содержат разрешающую способность принтера в точках на дюйм. Каждая строка изображения в развернутом виде содержит ButesPerLine байтов.

Один пиксель графического изображения может оказаться разбросанным по разным байтам сжатого образа. Это справедливо, например, для таких популярных режимов, как 640´350,16 цветов для EGA и 640´480,16 цветов для VGA. Поле BitsPerPixel сообщает, сколько битов в одном плане соответствует одному пикселю. Поле Nplanes содержит количество битовых планов изображения. Упомянутые режимы содержат по четыре плана и по одному биту на пиксель в каждом плане

Поле Palette содержит информацию о палитре, примененной при создании изображения. Сорока восьми байтов как раз хватает для описания палитры до шестнадцати цветов включительно. Если цветов больше, например 256, палитра хранится в файле сразу за сжатым графическим изображением. Поле PaletteInfo показывает тип палитры для данного изображения.
RLE – кодирование
Для сжатия графического изображения в формате PCX применяется метод RLE – метод группового кодирования. Цепочка одинаковых байтов заменяется на два байта – счетчик количества повторов и повторяемое значение. Два старших бита счетчика количества повторов всегда установлены в единицу. Это позволяет отличить его от байтов с видеоданными. Остальные биты содержат количество повторов – от1 до 63. Если же требуется закодировать один байт, у которого два старших бита установлены, приходится предварять его счетчиком, содержащим количество повторений 1.

Метод группового кодирования является превосходным для изображений, содержащим большие области, закрашенные одним цветом или одним узором. Для случайных же изображений или изображений, в котором оттенки серого имитируются сгущением или разрежением точек, данные могут не сжиматься, а даже вырастать на 25% за счет кодирования некоторых байтов двумя байтами.


Литература
Основная

1.Скляров В.А. Программное и лингвистическое обеспечение персональной ЭВМ. Справочное пособие. - Мн.: Вышейшая школа,1992.

2.Прокофьев Б.П.,Сухарев Н.Н.,Храмов Ю.Э.Графические средства Турбо-Си и Турбо-Си++. М: Радио и связь, СП "Ланит", 1992.

3.Касаткин А.К. Профессиональное программирование на языке СИ. Управление ресурсами. Справочное пособие. - Мн.: Выш. шк., 1992.- 432 с.

4.Нортон П. Программно - аппаратная организация IBM PC. - М.: Радио и связь, 1991.

6.Мэтьюз М., Мэтьюз К. Эффективная работа с COREL DROW6 для WINDOWS’95. Официальное руководство/ Пер. с англ. СПб: Питер, 1996, -736 с.

7. Роджерс Д. Алгоритмические основы инженерной графики -М.:.Радио и связь,1986.


Дополнительная

8.Загляднов И.Ю., Касаткин В.Н. Построение изображений на экране персональной ЭВМ.-К.:Техника,1990.

9.Грайс Д. Графические средства персонального компьютера. - М.: Мир. -376 с.

10.Нортон П. Персональные компьютеры фирмы IBM и операционная система MS-DOS.-М.:Радио и связь,1992.

11.Аммерал Л. В 4-х книгах./ Пер. с англ. - М.: »Сол. систем», 1992. Кн.1.Принципы программирования в машинной графике. - 224 с. ; кн.2.Машинная графика на персональных компьютерах.-232с.;кн.3.Интерактивная трехмерная графика. -317с.;кн.4. Программирование графики на Турбо Си. - 221 с.

12.Белецкий Я. Энциклопедия языка Си. Пер. с польск. – М.: Мир, 1992. – 687с.

13.Белецкий Я. Турбо Си++. Новая разработка. – М.: Машиностроение, 1994.

14. Романовский Л.М., Русс Т.В., Свитковский С.Г. Программирование в среде Си для ПЭВМ ЕС. – М.: Финансы и статистика, 1991.

15.Николь П., Альбрехт Р. Графический редактор CorelDRAW. Пер. с нем. - М.:ЭКОМ, 1994. - 416 с.

16.Роджерс Д., Адамс Дж. Основы интерактивной инженерной графики. -М..: Машиностроение,1980.

17.Энджел И. Практическое введение в машинную графику - М.:Радио и связь,1984.

18.Павлидис Т. Алгоритмы машинной графики и обработка изображений. -М.:Радио и связь,1986.

19.Фоли Дж., Ван Дэн А. Основы интерактивной инженерной графики в 2-х т.,-М.:Мир,1985.


Методические указания

14.Павленко В.Д. Методические указания к лабораторным работам по дисциплине «Машинная графика» - Одесса: ОГПУ, 1998. (Видаётся кафедрой)


с. 1

скачать файл

Смотрите также: