Автор работы: Пользователь скрыл имя, 23 Сентября 2013 в 21:13, курсовая работа
Существует специальная область информатики, изучающая методы и средства создания и обработки изображений с помощью программно-аппаратных вычислительных комплексов, – компьютерная графика. Она охватывает все виды и формы представления изображений, доступных для восприятия человеком либо на экране монитора, либо в виде копии на внешнем носителе.
Введение………………………………………………………………….4
1.Текстовый режим
1.1 Управление экраном в текстовом режиме………………………..5
1.2 Управление динамиком……………………………………………..8
2. Графический режим
2.1 Управление экраном в графическом режиме……………………..9
2.2 Создание движущихся изображений………………………………20
3.Пояснения к программе……………………………………………….27
4. Практическое задание курсовой работы……………………………29
Заключение………………………………………………………………..33
Библиографический список ……………………………………………..34
Таким образом, каждый цвет имеет четыре градации яркости: 0, 1/3, 2/3, 1, что позволяет кодировать 43=64 варианта цвета. На экране в этом режиме одновременно может присутствовать не более 16 цветов, так как имеется всего 16 регистров палитры.
Примечание. То, что цвет точки определяется кодом, записанным в регистре палитры, позволяет получать интересный эффект: если во время работы программы изменить цвет в одном из регистров палитры, то все точки, связанные с этим регистром палитры, изменят цвет.
Так можно реализовывать исчезновение и появление некоторого монохромного изображения.
4. «1 точка - 8 бит» - режим, использующий палитру на 256 цветов. В этом режиме используется та же идея записи кода цвета не в видеобуфер, а в регистры палитры, что и в предыдущем режиме, но используется 256 регистров палитры, в которых под запись цвета используется 18 бит. Из этих 18 бит под кодирование яркости каждого цвета используется 6 бит, обеспечивая 64 градации яркости каждого цвета. В этом режиме максимальная яркость красного цвета будет кодироваться так:
Таким образом, на экране можно одновременно видеть 256 цветов из 643=262144 возможных.
В настоящее время в основном используются режимы, в которых цвет кодируется еще большим количеством бит. К сожалению, работа в этих режимах и даже в режиме 256 цветов не обеспечивается стандартными средствами Borland Pascal 7.0.
Количество точек на экране, набор возможных цветов и количество страниц изображения, которые могут одновременно храниться в памяти, зависят от используемых технических средств (типа монитора и блока управления монитором - адаптера) и режимов их работы. Для каждого типа оборудования, существовавшего на момент разработки среды программирования, среда программирования Borland Pascal 7.0 включает свою программу управления дисплеем - драйвер, которая обеспечивает работу в нескольких доступных режимах, различающихся количеством точек на экране и количеством страниц, информация о которых может храниться в видеобуфере.
Последнее время из имеющихся
драйверов практически
Набор программных ресурсов, используемых для управления экраном в графическом режиме, содержится в модуле Graph.
Таблица 8.3
Процедуры и функции переключения режимов управления экраном.
Модуль Graph содержит средства, обеспечивающие различные варианты переключения текстового и графического режимов.
1. Процедура InitGraph(Var driver, mode:integer; path:string) – переключает экран в графический режим. При вызове процедуры следует объявить специальные переменные, куда занести константу драйвера и константу режима, и указать эти переменные в качестве параметров процедуры. Существует возможность запросить автоматическое определение драйвера и режима: для этого необходимо вместо константы драйвера в переменную, используемую в качестве параметра, записать константу detect=0.
Параметр path должен описывать путь, определяющий местоположение файла, который содержит требуемый драйвер (обычно все драйверы находятся в подкаталоге BGI основного каталога среды Borland Pascal). Если драйвер находится в текущем каталоге, то в качестве параметра передается пустая строка - ".
2. Функция GraphResult:integer - возвращает номер ошибки, обнаруженной при инициализации графического режима.
3. Функция GraphErrorMSG(ErrNum:
Полностью инициализация графического режима может быть выполнена следующим образом:
Var driver,mode,error: integer;
Begin
driver:=detect; {или driver:=0;}
InitGraph (driver,mode,'d: \BP \BGI');
error:=GraphResult;
if error<>0 then {если обнаружены ошибки}
begin
WriteLn('Ошибка
инициализации графического реж
Hah(1); {аварийное завершение программы}
end;
{работа в графическом режиме}...
4. Процедура CloseGraph - завершает работу в графическом режиме: выгружает драйвер и восстанавливает текстовый режим. Если завершить программу, не выходя из графического режима, то нормальная работа MS DOS нарушается, так как MS DOS функционирует в текстовом режиме.
Примечание. Если программа выполняется в среде программирования Borland Pascal, то среда сама восстановит текстовый режим после завершения работы программы.
5. Процедура RestoreCrtMode - осуществляет временный возврат в текстовый режим с сохранением графического изображения в видеобуфере.
6. Процедура SetGraphMode(mode:
7. Функция GetGraphMode:integer - возвращает номер активного графического режима.
Таким образом, временный выход в текстовый режим обычно оформляется следующим образом:
RestoreCrtMode; {переход в текстовый режим}
... {выполнение обработки в
SetGraphMode(GetGraphMode); {возврат в графический режим}
Процедуры и функции управления цветом. Модуль Graph содержит специальные процедуры и функции управления цветом изображения.
1. Процедура GetPalette(Var Palette:PaletteTyре) - возвращает размер и цвета текущей палитры. Палитра при этом считывается в специальную переменную типа PaletteType, также определенного в модуле Graph:
Туре
PaletteType=record
size:byte; {размер палитры}
Colors:array[0..MaxColors] of shortint; {цвета палитры}
end;
Цвета палитры кодируются десятичными числами от 0 до 63.
2. Процедура SetAllPalette(
EGABlack=0; {черный} EGADarkGrey=56; {темно-серый}
EGABlue=1; {синий} EGALightBlue=57; {светло-синий}
EGAGreen=2; {зеленый} EGALightGreen=58; {светло-зеленый}
EGACyan=3; {голубой} EGALightCyan=59; {светло-голубой}
EGARed=4; {красный} EGALightRed=60; {розовый}
EGAMagenta=5; {фиолетовый} EGALightMagenta=6
EGABrown=20; {коричневый} EGAYellow=62; {желтый}
EGALiglitGrey=7; {светло-серый} EGAWhite=63; {белый}
3. Процедура SetPalette(ColorNum,
4. Процедура SetBkColor(Color:
При инициализации графического режима видеобуфер очищается (обнуляется).
При этом все точки оказываются связаны с 0 регистром палитры, который и считается регистром, хранящим цвет фона. Процедура SetBkCoIor записывает в 0 регистр палитры цвет, указанный в параметре Color. Результат вызова этой процедуры аналогичен результату вызова процедуры SetPalette(0,Color).
5. Процедура SetColor(ColorNum:
6. Процедура GetDefaultPalette(var Palette:PaletteType) – возвращает стандартную палитру.
В качестве примера рассмотрим фрагмент программы, осуществляющий установку цвета фона и цвета рисования, а также чтение текущей палитры и вывод значений, содержащихся в регистрах палитры:
SetPalette(5,18); {записываем в 5-й регистр палитры цвет 010010 - ярко- зеленый}
SetColor(5); {текущий цвет рисования - цвет 5-го регистра палитры}
SetBkColor(5); {записываем в 0-й регистр палитры цвет фона 000101 - фиолетовый: фон сразу меняет цвет}
GetPalette(p); {читаем палитру в переменную р типа PaletteType}
for i:=0 to p.size do Write(p.colors[i]:5); {выводим цвета палитры на экран}
…
Процедуры и функции управления типом, толщиной линии и видом штриховки. Модуль Graph содержит средства, позволяющие управлять типом и толщиной линии, а также образцом закраски замкнутых контуров.
1. Процедура SetLineStyle(style, pattern, thickness: word) – устанавливает стиль style или образец pattern линии и ее толщину thickness.
Для установки стиля используют следующие константы:
SolidLn=0; {сплошная}
DottedLn=l; {точечная}
CenterLn=2; {штрихпунктирная}
DashedLn=3; {пунктирная}
UserBitLn=4; {определенная программистом в образце}
Если указаны стили 0..3, то образец игнорируется. Если установлен стиль 4, то вид линии определяется образцом.
Образец линии - 16 или 48 бит, заданных шестнадцатеричным числом, единицы и нули кодируют точки и пропуски, например: комбинация 1010 1010 1010 1010, которая соответствует шестнадцатеричному числу $АААА, означает линию из частых точек. Образцы из 48 бит используют для определения вида линии тройной толщины.
Толщину линии можно установить одинарной и тройной, соответствующие константы выглядят следующим образом:
NormWidth=l; {нормальная толщина линии}
ThickWidth=3; {тройная толщина линии }
Например:
SetLineStyle(UserBitLn,$AAAA,
стиль линии: частые точки, линия одинарной толщины}
2. Процедура SetFillStyle(fillstyle, color: word) - устанавливает образец fillstyle и цвет color штриховки замкнутых контуров. Для определения образцов штриховки можно использовать следующие константы:
3. Процедура SetFillPattern (FillPattern:FillPatternType; color:word) – устанавливает пользовательский образец fillPatern и цвет color штриховки. Образец штриховки задают с помощью переменной специального типа:
Туре FillPatternType = array [1..8] of byte;...
Переменная этого типа определяет квадрат 8x8 точек, где биту, установленному в 1, соответствует точка заданного цвета, а биту, установленному в 0 - точка цвета фона.
Например:
Const Р1:FillPatternType = ($АА, $55, $АА, $55, $АА, $55, $АА, $55);
Р1 определяет квадрат 8x8 точек следующего вида:
10101010
01010101
10101010
01010101
10101010
01010101
10101010
01010101
На экране при штриховке данным стилем мы будем видеть частые ромбы.
4. Процедура FloodFill(x, у, color: word) - закрашивает текущим образцом и цветом закраски, установленными процедурой SetFillStyle, область, ограниченную контуром цвета color, внутри которой находится точка с координатами (х,у). Если контур не замкнут, то будет закрашен весь экран.
Процедуры и функции рисования. Модуль Graph предоставляет программисту большой набор процедур и функций, рисующих различные примитивы (простейшие фигуры, размеры и местоположение которых определяются параметрами).
1. Процедура PutPixel(x,у,color:
2. Функция GetPixel(x,y:word):word - возвращает номер регистра палитры, определяющего цвет точки с указанными координатами.
3. Функция MoveTo(x,y:word):word - задает положение текущей точки - точки, используемой в качестве исходной при рисовании линий или выводе текста.
4. Процедура MoveRel(dx,dy:word) - задает положение текущей точки относительно ее предыдущего положения.
5. Функции GetX:word и GetY:word - возвращают соответственно координаты x и у текущей точки.
6. Функции GetMaxX:word и GetMaxY:word - возвращают соответственно максимальные размеры экрана в точках для текущего режима.
7. Процедура Line(x1,y1,x2,y2:
8. Процедура LineTo(x,y:word) - рисует линию из текущей точки в точку (х,у).
9. Процедура LineRel(dx,dy:word) - рисует линию из текущей точки в точку, отстоящую от текущей на dx,dy.
10. Процедура Rectangle(x1,y1,x2,
11. Процедура Bar(x1,y1,x2,y2:
12. Процедура Bar3D(xl,yl,x2,y2,
13. Процедура DrawPoly(numPoints:
Type PointType = record
x,y:word;
end;...
Например:
Var MP:array[5] of PointType; {объявление массива координат точек}
Информация о работе Разработка алгоритма и программы комплексной графики с динамическим объектом