46019 (665326), страница 35

Файл №665326 46019 (Turbo C++ Programer`s guide) 35 страница46019 (665326) страница 352016-07-31СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 35)

Управление цветом на CGA

Вследствие различий в графическом аппаратномобеспечении фактическое управление цветами различно для CGA и EGA,что заставляет нас рассмотреть их по отдельности. Управление цветом для драйвераAT&T, а также режимы низкой разрешающей способности драйвера MCGA аналогичны управлению цветом CGA.

В случае CGA вы можете выбрать либо режим низкойразрешающей способности (320х200), который допускает использование четырех цветов, либо режим высокой разрешающей способностей (640х200), где допускается использование двух цветов.

CGA в режиме низкой разрешающей способности

В режиме низкой разрешающей способности вы имеете возможность выбрать одну из четырех четырехцветных палитр. В каждой из этих четырех палитр вы можете сами установить только первый (цвет 0) элемент; цвета 1, 2 и 3 являются фиксированными. Первый элемент палитры (цвет 0) - это цвет фона. Этот цвет может являться одним из 16 имеющихся цветов (см. таблицу цветов фона, приводимую ниже).

Вы выбираете желаемую палитру, выбирая соответствующий режим (CGAC0, CGAC1, CGAC2, CGAC3); эти режимы используют палитры цветов от 0 до 3, соответственно, как показано в следующей таблице. Цвета вычерчивания в CGA и эквивалентные им константы определяются в graphics.h.

-----------------------------------------------------------

Константа, присвоенная номеру цвета (значению пикселя) Номер -------------------------------------------------- палитры 1 2 3

-----------------------------------------------------------

0 CGA_LIGHTGREENCGA_LIGHTRED CGA_YELLOW

1 CGA_LIGHTCYANCGA_LIGHTMAGENTA CGA_WHITE

2 CGA_GREENCGA_RED CGA_BROWN

3 CGA_CYANCGA_MAGENTA CGA_LIGHTGRAY

Для того, чтобы назначить один из этих цветов цветом вычерчивания CGA, нужно вызвать функцию setcolor, задав в ней в качестве аргумента либо номер цвета, либо имя соответствующей константы; например,если вы используете палитру3 и желаете назначить цветом вычерчивания cyan, то можно записать:

setcolor(1);

или

setcolor(CGA_CYAN);

В следующей таблице перечислены назначаемые для CGA цвета фона:

-----------------------------------------------------------

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

значение имя значение имя

0

1

2

3

4

5

6

7

BLACK8 DARKGRAY

BLUE9 LIGHTBLUE

GREEN 10 LIGHTGREEN

CYAN 11 LIGTHCYAN

RED 12 LIGHTRED

MAGENTA 13 LIGHTMAGENTA

BROWN 14 YELLOW

LIGHTGRAY 15 WHITE

Цвета CGA для переднего плана те же, что находятся в данной таблице.

Для назначения одного изэтих цветов в качестве фонового цветаслужитфункция setbkcolor(цвет), где цвет - это один из элементов приведенной выше таблицы. Отметим, что для CGA цвет не является значением пикселя (индексом в палитре); он прямо задает фактический цвет, помещаемый в первый элемент палитры.

CGA в режиме высокой разрешающей способности

В режиме высокой разрешающей способности (640x200)CGA работает с двумя цветами - черным цветом фона и цветным передним планом. Пиксели могут принимать при этом значения только 0 или 1. В связи с особенностями CGA цветом переднего плана фактически является тот цвет, который аппаратное обеспечение считает цветом фона; таким образом, цвет переднего плана устанавливается подпрограммой setbkcolor. (Странно, но факт).

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

Следующие режимы работают аналогичным оюразрм: CGAHI, MCGAMED, MCGAHI, ATT400MED и ATT400HI.

Подпрограммы управления палитрой в случае CGA

Поскольку палитра CGA является предопределенной, подпрограмму setallpaletteиспользовать в данном случае нельзя. Также не следует использовать setpalette(индекс, фактический _цвет), за исключением индекс=0. (Этоальтернативный способ установки фонового цвета CGA равным фактическому_цвету).

Управление цветом для EGA и VGA

В случае EGA палитрасодержит 16 элементов из общего количества 64 возможных цветов, причем каждый из элементов палитры можетбыть задан пользователем. Доступ к текущей палитре выполняется через getpalette, которая заполняет структуру, включающую всебя размер палитры (16) имассивфактических элементов палитры ("аппаратные номера цветов", хранимые в палитре). Элементы палитры можно изменять как по отдельностипри помощи setpalette, либо все сразу через setallpalette.

Палитра EGA по умолчанию соответствует 16 цветам CGA, которые были даны впредыдущей таблице цветов: черный равен элементу 0, голубой равен элементу 1, ... , белый равен элементу 15. В graphics.h определены константы, которые содержат соответствующие цветам аппаратные значения: это EGA_BLACK, EGA_WHITE и т.д.Эти значения могут быть также получены через getpalette.

Подпрограмма setbkcolor(цвет) на EGAработает несколько иначе, чем на CGA. На EGA setbkcolor копирует фактическое значение цвета, хранящееся в элементе #цвет, в элемент #0.

Что касается цветов, то драйвер VGA работает фактическитак же, как и драйвер EGA; он просто имеет более высокое разрешение (и меньшие по размеру пиксели).

Обработка ошибок в графическом режиме

Ниже приводитсякраткий обзорфункций обработки ошибок в графическом режиме:

grapherrormsg Возвращает строку с сообщением об ошибке для заданного кода ошибки.

graphresult Возвращает код ошибки для последней графической операции, в которой встретилась ошибка.

Если ошибка произошла при вызове графической библиотечной функции (например,не найден шрифт, запрошенный функцией settextstyle), устанавливается внутренний код ошибки. Доступ к коду ошибки для последней графической операции, сообщившей об ошибке, выполняется при помощи graphresult. Определены следующие коды возврата ошибки:

-----------------------------------------------------------

Код Константа Соответствующая строка

ошибки графической_ошибки с сообщением об ошибке

0 grOk No error Нет ошибки

-1 grNoInitGraph (BGI) graphics not installed (use initgraph)

(BGI) графика не инсталирована

(используйте initgraph)

-2 grNotDetected Graphics hardware not detected Графическое аппаратное обеспечение

не обнаружено

-3 grFileNotFound Device driver file not found Не найден файл драйвера устройства

-4 grInvalidDriver Invalid device driver file Неверный файл драйвера устройства

-5 grNoLoadMem Not enough memory to load driver Не хватает памяти для загрузки

драйвера

-6 grNoScanMem Out of memory in scan fill Кончилась память при сканирующем

заполнении

-7 grNofloodMem Out of memory in flood fill Кончилась память при лавинном

заполнении

-8 grFontNotFound Font file not found

Файл шрифта не найден

-9 grNoFontMem Not enough memory to load font Не хватает памяти для загрузки

шрифта

-10 grInvalidMode Invalid graphics mode for selrcted driver

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

-11 grError Graphics error Графическая ошибка

-12 grIOerror Graphics I/O error Графическая ошибка ввода/вывода

-13 grInvalidFont Invalid font file Неверный файл шрифта

-14 grInvalidFontNum Invalid font number Неверный номер шрифта

-15 grInvalidDeviceNum Invalid device number Неверный номер устройства

-16 grInvalidVersion Invalid version of file Неправильная версия файла

-----------------------------------------------------------

Вызов grapherrormsg(graphresult()) возвращает строку сообщения об ошибке из вышеприведенной таблицы.

Код возврата ошибки накапливается, изменяясь только когда графическая функция сообщает об ошибке. Код возврата ошибки сбрасывается в 0 только при успешном выполнении initgraph, либо при вызове graphresult. Таким образом, если вы хотите знать, какая графическая функция возвратила ошибку, нужно хранить значение graphresult во временной переменной и затем проверять ее.

Функции запроса состояния

Ниже приводится краткое изложение функций запроса состояния графического режима:

getarccoords Возвращает информацию о координатах, заданных в последнем вызове arc или ellipse.

getaspectratio Возвращает коэффициент сжатия для графического экрана.

getbkcolor Возвращает текущий цвет фона.

getcolor Возвращает текущий цвет вычерчивания.

getdrivername Возвращает имя текущего графического драйвера.

getfillpattern Возвращает шаблон заполнения, определяемый пользователем.

getfillsettings Возвращает информацию о текущем шаблоне

и цвете заполнения.

getgraphmode Возвращает текущий графический режим.

getlinesettings Возвращает текущие стиль, шаблон и толщину линии

getmaxcolor Возвращает максимально допустимое на текущий момент значение пикселя.

getmaxmode Возвращает максимально допустимый номер режима для текущего драйвера.

getmaxx Возвращает текущее разрешение по оси x.

getmaxy Возвращает текущее разрешение по оси y.

getmodename Возвращает имя данного режима драйвера.

getmoderange Возвращает диапазон режимов для данного

драйвера.

getpalette Возвращает текущую палитру и ее размер.

getpixel Возвращает цвет пикселя в (x,y).

gettextsettings Возвращает текущий шрифт, направление, размер и способ выравнивания текста.

getviewsettings Возвращает информацию о текущем графическом окне.

getx Возвращает координату x текущей позиции (CP).

gety Возвращает координату y текущей позиции (CP).

В каждой из категорий графических функций Turbo C++ имеется хотя бы одна функция запроса состояния. Эти функцииупоминались при рассмотрении соответствующих категорий и также рассматриваются здесьотдельно. Каждая из графических функций запроса состояния Turbo C++ имеет имя вида "getчто-то" (за исключением категории функций обработки ошибок). Некоторые из них не принимают никаких аргументов ивозвращают единственное значение, представляющее собой искомую информацию; прочие берут указатель структуры, определяемой в graphics.h, заполняют эту структуру соответствующей информацией и не возвращают никаких значений.

Функциями запроса состояния категории управленияграфической системы являются getgraphmode, getmaxmode и getmoderange. Первая из них возвращает целое число, определяющее текущийграфический драйвер и режим, вторая возвращает максимальный номер режима для этого драйвера, а третья возвращает диапазон режимов, поддерживаемых данным графическим драйвером. getmaxx и getmaxy возвращают соответственно максимальные экранные координаты x и y для текущего графического режима.

Функциями запроса состояниякатегории вычерчивания и заполнения являются getarccoords, getaspectratio, getfillpattern и getlinesettings. getarccoords заполняет структуру, содержащуу координаты, которые использовались при последнем вызове функций arc или ellipse; getaspectratio сообщает текущийкоэффициент сжатия, используемый графическойсистемой для того, чтобы окружности выглядели круглыми. getfillpatternвозвращает текущий определяемыйпользователем шаблон заполнения. getfillsettings заполняет некоторуюструктуру текущим шаюлоном и цветом заполнения. getlinesettings заполняет структуру текущим стилем линии(сплошная, пунктир и т.д.), толщиной (обычнаяили увеличенная), а также шаблоном линии.

Функциями запроса состояниякатегории манипулирования графическим окном являются getviewsettings, getx, gety и getpixel. После того, как графическое окно определено, вы можете найтиего абсолютные экранные координаты ивыяснить состояние режима отсечки, вызвав getwiewsettings, которая заполняет соответствующей информацией некоторую структуру. getx и gety возвращают (относительно графическогоокна) x- и y-координаты текущей позиции. getpixel возвращает цвет указанного пикселя.

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

Функциями запроса состоянии категорииуправления цветом являются getbkcolor,возвращающая текущий цвет фона, getcolor, возвращающая текущий цвет вычерчивания и getpalette,заполняющая структуру, которая включаетв себя размер текущей палитры и ее содержимое. getmaxcolor возвращает максимально допустимое значение пикселя для текущего графического драйвера и режима (размер палитры -1).

Характеристики

Тип файла
Документ
Размер
2,71 Mb
Тип материала
Учебное заведение
Неизвестно

Список файлов реферата

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6529
Авторов
на СтудИзбе
301
Средний доход
с одного платного файла
Обучение Подробнее