Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Работа с фрагментами изображения

SetAspectRatio.

GetAspectRatio

Коэффициент сжатия.

Установка цвета и стиля.

Атрибуты графических фигур

Функция SetFillStyle (Pattern:word; Color:word) устанавливает маску Pattern (Таблица 9) и ее цвет Color, т.е. определяет стиль заполнения.

Получить информацию о задействованном стиле (о коде маски и цвета) можно с помощью процедуры GetFillSettings (var Inf: FillSettingsType).

Таблица 9

Стандартные стили заполнения

Константа Значение Маска
EmptyFill   Заполнение цветом фона
SohdFill   Заполнение текущим цветом
LineFill   Заполнение символами —, цвет — color
LtslashFill   Заполнение символами // нормальной толщины, цвет — color
SlashFill   Заполнение символами // удвоенной толщины, цвет — color
BkslashFill   Заполнение символами \\ удвоенной толщины, цвет — color
LtbkSlashFill   Заполнение символами \\ нормальной толщины, цвет — color
HatchFill   Заполнение вертикально-горизонтальной штриховкой тонкими линиями, цвет-color
XhatchFill   Заполнение штриховкой крест-накрест по диагонали "редкими" тонкими линиями, цвет-color
InterLeaveFill   Заполнение штриховкой крест-накрест по диагонали "частыми" тонкими линиями, цвет — color
WideDotFill   Заполнение "редкими" точками
CloseDotFill   Заполнение "частыми" точками
UserFill   Заполнение по определенной пользователем маске заполнения, цвет— color

 

aspect ratio

Для определения размера памяти, необходимой для сохранения образа фрагмента служит функция ImageSize (XI, Yl, X2, Y2: Integer):Word, байт.

Сохранение образа фрагмента в памяти выполняется процедурой

GetImage (XI, Yl, X2, Y2: Integer; var BitMap);

Параметры XI, Yl, X2, Y2 определяют прямоугольную область экрана.

Процедура PutImage (X, Y:integer; var bitmap; Oper:word) -выводит из буфера на экран двоичный образ заданной области экрана.

Фрагмент 7.

Точка с координатами (X,Y) определяет верхний левый угол прямоугольной области экрана. Параметр BitMapявляется нетипизированным параметром, который определяет ширину и высоту области экрана. Параметр Ореr определяет способ взаимодействия вновь размещаемой копии с уже имеющимся на экране изображением. Взаимодействие осуществляется путем применения кодируемых этим параметром логических операций к каждому биту копии и изображения. Для указания применяемой логической операции можно использовать одну из следующих предварительно определенных констант.

CONST

CopyPut = 0; { замена существующего изображения на копию }

XORPut = 1; { исключительное ИЛИ }

ORPut = 2; { объединительное ИЛИ }

ANDPut = 3; { логическое И }

NOTPut = 4; { инверсия изображения }

Наиболее часто используются операции CopyPut, XORPut, NOTPut. Первая из них просто стирает часть экрана и на это место помещает копию из памяти в том виде, как она там сохраняется. Операция NOTPut делает то же самое, но копия выводится в инверсном виде. Операция XORPut, примененная к тому же месту экрана, откуда была получена копия, сотрет эту часть экрана. Если операцию применить дважды к одному и тому же участку, вид изображения на экране не изменится. Таким способом можно перемещать изображения по экрану, создавая иллюзию движения.

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

Пример: работа с фрагментами изображения

USES Graph;

VAR

Driver, Mode: INTEGER;

Size: WORD; { размер области }

X1, Y1: WORD; { координаты начальной точки }

p: POINTER; { указатель на область }

BEGIN

Driver:=Detect;

InitGraph(Driver, Mode, '');

IF GraphResult<>0 THEN HALT(1);

{ построение исходной фигуры }

SetFillStyle(SolidFill, LightRed);

PieSlice(GetMaxX div 2, GetMaxY div 2, 0, 360, 100);

ReadLn;

X1:= GetMaxX DIV 2 - 100;

Y1:= GetMaxY DIV 2- 100;

Size:=ImageSize(X1,Y1,X1+200,Y1+200);

{ выделение памяти для области }

GetMem(p,Size);

{ сохранение указанной области в памяти }

GetImage(X1,Y1,X1+200,Y1+200,p^);

ClearDevice;

SetBkColor(Blue);

{ отображение области в режиме копирования }

PutImage(X1,Y1,p^,CopyPut);

ReadLn;

{ отображение области в режиме XOR }

{ изображение удаляется с экрана }

PutImage(X1,Y1,p^,XORPut);

ReadLn;

CloseGraph;

END.

Фрагмент 8. Пример использования графики:

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

program Dem_Gra; {Построение столбиковой диаграммы}

uses Crt, Graph;

const Count=10;

Width =40; {Ширина столбца диаграммы}

var

I,X1,X2,Y1,Y2: integer;

M: array[1..Count]of byte;

DriverVar, ModeVar: integer;

S_M: string;

begin

Writeln('Ввод данных (целые числа) для построения диаграммы');

for I:=l to Count do

begin

repeat{Ввод с контролем, входит ли введенное значение в [1..10]}

Write('Введите значение', I, '-го параметра (от 1 до 10):');

Readln(M[I]);

if not M[I] in [1..10] {Если введенное значение не входит в интервал [1..10]}

then Writeln('Значение параметра должно быть от 1 до 10');

until M[I] in [1..10];

end;

DriverVar:=Detect; {Инициализация графического режима}

InitGraph(DriverVar, ModeVar, '');

SetViewPort(10,10,630,400,True ); {Создать окно}

SetTextStyle(DefaultFont,HorizDir,1);

Yl:=325; {Построение гистограммы}

for I:=l to Count do {Повторять, пока не построим все столбики}

begin

XI:=I*50;

Str(M[I],S_M); {Преобразовать значение М[1] в строку для вывода в графическом режиме на экран}

SetFillStyle(I,I); {Задать стиль и цвет заполнения}

Bar3D(Xl,Yl,Xl+Width,Yl-M[I]*30,10,TopOn); {Построить столбиковую диаграмму}

OutTextXY (X1+15,Y1-M[I]*3O-15,S_M); {Напечатать над столбиком значение отображаемой величины}

end;{Конец цикла}

{Вывод пояснительных надписей}

SetTextStyle(DefaultFont,HorizDir,2);

OutTextXY(150,20,'Пример гистограммы');

SetTextStyle(DefaultFont,VertDir,1);

OutTextXY(40,175,'Величина параметра');

SetTextStyle(DefaultFont,HorizDir,1);

OutTextXY(250,GetMaxY-140,'Параметры');

OutTextXY(150,GetMaxY-100,'Для завершения нажмите Enter');

Readln;

CloseGraph;

end.

В результате работы программы получаем гистограмму, изображенной на Рис. 2.

Подробнее – в МУ «ГРАФИКА В PASCAL-ПРОГРАММАХ».

Рис. 2

ПРИЛОЖЕНИЕ

<== предыдущая лекция | следующая лекция ==>
Построение дуг и окружностей | Процедуры управления экраном, окном, страницей
Поделиться с друзьями:


Дата добавления: 2014-01-05; Просмотров: 388; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.024 сек.