Увод в компютърната графика



Дата18.09.2016
Размер187.27 Kb.

Стр.


28.09.98 Увод в компютърната графика
1.Определение за компютърна графика – възниква за подобряване на интерфейса между компютъра и човека.

ДЕФ: Съвкупност от методи и средства за преобразуване на данни от графична форма на представяне с помощта на компютър.

2. Области на приложение:

А) Синтез на графични обекти (генерираща КГ) – въз основа на описания и данни се създава графичен образ. Данните могат да постъпват от входно устройство, да бъдат резултат от изчисление или от действие на програма. Графичния образ се създава от елементарни графични елементи (точки, отсечки и др.).

Б) Анализ на графичния образ (разпознаване на образи). От графичното изображение може да се получи формално описание. Графичното изображение може да постъпва като фото-копие, образ от видеокамера или вече растеризирано изображение. Трябва да намерим елементарни обекти, от които да създадем изображението. Пр.: Разпознаване на букви от ръкописен текст.

В) Обработка на графични образи (обработка на изображения) – при зададено графично изображение трябва да се получи ново с променени характеристики. Целта е да се подобри възприятието на образа от човека. Използват се методи за филтриране на образа, за увеличаване на контраста, за премахване на шума.

3. Технологии на КГ

3.1. Модели на изображението – начин за съхраняване на информация за изображението. За графични модели информация се съхранява за точки от модела, а не за целия модел.

3.1.1 Текст

ASCII (8-битов) код: основен и горен (разширен) регистри; 28 кодови комбинации Unicode (16-битов): включва ASCII като подмножество от всичките 216 кодови комбинации (... японска и корейска азбуки).

3.1.2. Графика

Пиксел - точка върху отпечатана страница или екрана.Атрибути на пиксела (описание за яркостта и цвета на всеки пиксел - RGB).

3.1.3. Режими за дисплейване и отпечатване


  • Текстов - с вариране на широчини и броя на редовете.

  • Графичен - точкова графика (bitmap), на всеки пиксел отговаря код

3.1.4. Растерни и векторни модели

3.1.4.1. Битмап - Изображението се описва като масив от пиксели (bitmap) Разделителна способност (определя се от размерите и броя на пикселите) - VGA екран от 640х480 пиксели (307200) изисква 38,4 KB данни в ч/б режим. При 256 цвята (8 бита за пиксел) се изискват 8х38,4 KB.Приложни програми - PaintBrush, Aldus PhotoStyler.

3.1.4.2. Обектно-ориентирана графика

Изображението се описва векторно, още т.нар. обектно-ориентираната графика (отсе

чки, окръжности, многоъгълници и криви).Вектор 320,240 задава пиксел в центъра на VGA екран (640х480).Приложни програми - програми за чертане (CorelDRAW, Micrografx Designer, Aldus Freehand), CAD програми (AutoCAD), текстообработващи редактори и програми за електронни таблици (Microsoft Word, Exel, Lotus 1-2-3).Предимства на векторната графика - малки размери на файловете, хардуерна независимост и описание с помощта на процедурни езици за програмиране.

3.1.5. Хардуерна независимост на моделите на изображенията

Описание на файл, позволяващо изход при максимална разрешаваща способност на устройството (векторната графика е хардуерно независима, а растерната - не).

3. Графични файлови формати - Формати, използващи различни методи за описание (за битмап или векторна графика, с възможност за компресиране)

3.2.1. Битмап файлови формати - TIFF (Tagged Image File Format) на Aldus и Microsoft. TIFF версия 5.0 има 8-битов код на сивото (256 степени), 24-битови цветни изображения и черно-бяло изображение. TIFF файловете обикновено са твърде големи - едно изображение с размери 8,5х11 инча и 24 бита за цвят може да заеме до 6 MB. PCX, създаден за програми PC Paintbrush и Publisher's Paintbrush, поддържа 8-битови степени на сивото и цветове.

3.2.2. Обектно-ориентирани формати - PostScript на Adobe за PageMaker на Aldus, за Macintosh, LazerWriter CGM (Computer Graphics Metafile), използван в програми за чертане (Harvard Graphics, CorelDRAW, Lotus Freelance, Arts & Letters и Micrografx Designer), програми за планиране на страници (Ventura Publisher и Aldus PageMaker), текстообработва

щи програми (WordPerfect и Word).

3.2.3. Комбинирани битмап и обектно-ориентирани формати - EPSF (Encapsulated PostScript - капсулиран PostScript) е PostScript текстово описание на графично изображение, придружен от представяне с ниска разделителна способност за извеждане на изображението.

PICT (Macintosh векторен формат), кодиран като команди на QuickDraw (графичен език на Macintosh). Оригиналната спецификация съдържа само черно-бял формат, но могат да бъдат присвоени и 8 стандартни цвята.
Разпространени графични файлови формати

Име Тип Платформа Описание/Приложение

.BIT R PC Bitmap/Собствен формат на Lotus Manuscript

.BMP R Win Bitmap/MS Windows формат

.CGM V PC Computer Graphics Metafile/Използван от програмите Lotus Freelance,

Hardware Graphics, Zenographix's Pixie и Aldus PageMaker

.CLP R Win Clipboard/MS Windows формат

.DCA T All Document Interchange Format/Преносим текстов формат за Lotus 1-2-3,

използван за електронни таблици, бази данни и други програмни продукти

.DOC T PC,Mac Document/Собствен формат на програмата Word на Microsoft,

използван и от други текстообработващи програми

.DRW V Win Draw/Собствен формат на Micrografx

.DXB V PC Двоичен вид на файла .DXF

.DXF R Mac,PC,Sun Data Exchange Format/Разработен от AutoDesk за AutoCAD,

стандартно файлово описание за CAD, повечето Mac пакети се доставят с

транслатори за .DXF формат

.EPS R/V Mac,NeXT,PC,WIN Encapsulated PostScript (Използван от Aldus, Adobe и др.)

Стандартен формат за обектна и растерна графика

.GEM V PC Graphics Environment Manager/Използван от продуктите на Digital

Research иVentura Publisher за обектна графика

.GIF R PC Graphics Interchange Format/Използван от CompuServe за цветна графика

.HPGL V PC Hewlett-Packard Graphics Language (Използван в HP плотери)

.IFF R Amiga Image File Format - Стандартен файлов формат на Commodore Amiga

.IMG R PC Image/Използван от програмите GEM и Ventura Publisher за битмапова

графика

.MAC


.PNT R Mac,PC MacPaint/Използван от PC програми и всички Mac програми за

чертане; някои PC програми използват файлове с разширение .PNT

.PCC R PC ZSoft's Paintbrush Cliboard/Собствен формат на Paintbrush Cliboard

.PCL R/V PC Printer Control Language/Използван от принтери на Hewlett-Packard

LazerJet

.PCX BM PC ZSoft's Paintbrush/Собствен формат на ZSoft's Paintbrush, широко

използван

.PIX R PC Picture/Използват се версии за Inset, при средства за захващане на екрани

и други PC видео средства

.PLT R Mac,PC Plot/Файлов формат за плот на AutoCAD

.PUB R/V/T Mac,PC Publication/Използван от Aldus PageMaker

.RTF T Mac,PC Rich Text Format/Преносим текстов формат на Microsoft

.SLD V Mac,PC Slide/Използван от AutoCAD като собствен формат

.SYLK T Mac,PC Symbolic Link/Преносим текстов формат на Microsoft за електронни

таблици и бази данни

.TGA R Mac,PC Targa/Използван от програмите за екранно захващане Targa

.TIF

.TIFF R Mac,PC,NeXT Tagged Image File Format/Разработен от Aldus и Microsoft,



популярен битмапов формат

.TXT


.TEXT A All Text/ASCII текстов файл, универсален стандарт

.WP T Mac,PC WordPerfect/Използван като собствен формат за WordPerfect (понякога

.WPF)
Използвани означения

R - битмапова или растерна графика;

V - обектно-ориентирана или векторна графика;

T - текст;

A - ASCII;

Mac - Macintosh;

PC - IBM PC и съвместими;

NeXT - Компютри NeXT;

Amiga - Компютри Commodore Amiga;

Sun - Компютри Sun;

WIN - Microsoft Windows;

All - Всички видове микрокомпютри;


4. Компресиране на изображенията

4.1. Компресиране без загуби - RLE (Run Length Encoding) преглежда изображението по редове от началото до края. Ако открие повтарящи се стойности - например много сини пиксели - той записва стойността и след това броя на повторенията. Ако следващият ред съдържа същата стойност, за него също се използва по-кратък код.

4.2. Компресиране със загуба на данни - Загубите на част от данните обикновено засяга броя на поддържаните цветове и общата разделителна способност. DCM (Diffential Code Modulation) измерва разликите в стойностите на цветовете на съседните пиксели и кодира тези числа. BPR (Block Pixel Replication) редуцира броя на цветовете. Тъй като кодирането на цвят с 24 бита дава възможност да се представят 16,8 милиона цвята, а окото може да възприеме само до 10000 цвята, това обикновено е допустимо.Международен стандарт JPEG (Joint Photographic Experts Group). Този стандарт използва три алгоритъма, два от които са със загуби.

5. Изобразяване на текст

5.1. Растерни шрифтове (bitmap fonts) – съхраняват се като карта за всеки символ (пр.:8х8)

5.2. Щрихови шрифтове (stroke fonts) – всеки символ се изгражда от движението на една абстрактна писалка. За всеки символ се съхранява векторно описание за движението на писалката.

5.3. Контурни шрифтове (outline fonts) – пази се векторно описание за контура на шрифта. Преди да може да се използва трябва да се растеризира. Контура се поставя върху мрежа от пиксели, за да се види кои трябва да се осветят.

6. Графични адаптери

ДЕФ: Адаптера е устройство, което управлява работата на дисплея. Една част от видеопространството е отделена за съхраняване на информация за пиксела. Тази част се нарича видеопамет.

6.1. Видеопамет – в нея се съхраняват стойности за атрибутите на пикселите. Адаптера непрекъснато сканира тази памет и преобразува стойностите на атрибутите на пикселите в сигнали за управление интензивността на електронните лъчи във видеомонитора.

6.2. Графични страници – една графична страница е част от видеопаметта, съдържаща стойности за атрибутите на всички пиксели от екрана. В един момент може да се покаже само една от страниците. За да се покаже друга, адаптера трябва да започне да я сканира. Това е един от начините за правене на анимация.

6.3. Карта на цветовете – съдържа 2n елемента, където n е дълбочината на цветовата гама за описване на атрибутите на един пиксел. Векторите на цветовете могат да се сменят. Картата на цветовете определя какъв е действителния цвят. Без да сменяме атрибутите, променяме цвета на средата.

6.4. Режими на графичните адаптери


  • текстови – обикновенно 2 или 3. Различават се по разделителната способност, броя на поддържаните цветове, броя на страниците.

  • Графични

  • CGA (Color Graphics Adapter)

320x100 2 bits.pixel 1 page

640x200 1 bit/pixel 1 page



  • EGA (Enhanced Graphics Adapter)

640x200 4bits/pixel 16 colors 1 page

640x350 4bits/pixel 16 colors 2 pages

videomemory: 64 KB, A0000H

colormap : 16



  • VGA (Video Graphics Adapter)

640x480 4bits/pixel 16 colors 1 page

320x200 8bits/pixel 256 colors 1 page

640x200 4bits.pixel 16 colors 4 pages

videomemory: 256k/512k, A0000H

colormap: 256


  • MCGA (Memory Control Graphics Adapter)

320x200 & 640x200 on CGA mode

320x200 & 640x480 on VGA mode



  • IBM 8514

640x480

1024x768


7. Графични драйвери

ДЕФ: Драйвер : програма, която управлява работата на дисплея, с помощта на графичния адаптер. За един графичен адаптер могат да се използват няколко драйвера, които имитират работата на различни адаптери.



  • CGA.BGI (CGA, MCGA)

  • EGAVGA.BGI (EGA, VGA)

  • HERC.BGI (Herculess)

  • ATT.BGI (AT&T)

  • PC3270.BGI (IBM 3270PC)

  • IBM8514.BGI (IBM8514)

      1. Graph Interface Unit

1. Координатна система и текущ указател (CP - Current Pointer) Координатите на пиксела в горния ляв ъгъл на екрана са (0,0), а на долния десен - (GetMaxX,GetMaxY). Текущият указател CP определя положението на електронния лъч, позицията му се означава с (x,y).

2. Инициализация на графичната система. Преди работа в графичен режим, той трябва да се инициализира. Инициализацията се прави чрез графични драйвери. За всеки драквер системата използва номера.



2.1. Символични имена на графичните драйвери

const

CurrentDriver = -128; { Параметър на GetModeRange }

Detect = 0; { Автоматично тестване на апаратурата за }

{ определяне на типа на графичния драйвер}

CGA = 1;

MCGA = 2;

EGA = 3;

EGA64 = 4;

EGAMono = 5;

IBM8514 = 6;

HercMono = 7;

ATT400 = 8;

VGA = 9;

PC3270 = 10;
2.2. Символични имена на графичните режими

const

CGAC0= 0; {320x200 палитра 0: LightGreen, LightRed, Yellow; 1 страница}

CGAC1= 1; {320x200 палитра 1: LightCyan, LightMagenta, White; 1 страница }

CGAC2= 2; {320x200 палитра 2: Green, Red, Brown; 1 страница }

CGAC3= 3; {320x200 палитра 3: Cyan, Magenta, LightGray; 1 страница }

CGAHi= 4; {640x200 2 цвята 1 страница }

MCGAC0= 0; {320x200 палитра 0: LightGreen, LightRed, Yellow; 1 страница}

MCGAC1= 1; {320x200 палитра 1: LightCyan, LightMagenta, White; 1 страница }

MCGAC2= 2; {320x200 палитра 2: Green, Red, Brown; 1 страница }

MCGAC3= 3; {320x200 палитра 3: Cyan, Magenta, LightGray; 1 страница }

EGALo= 0; {640x200 16 цвята 4 страници}

EGAHi= 1; {640x350 16 цвята 2 страници}

EGA64Lo= 0; {640x200 16 цвята 1 страница}

EGA64Hi= 1; {640x350 4 цвята 1 страница}

EGAMonoHi= 3; {640x350 64K on card, 1 страница; при памет 256K - 2 страници}

HercMonoHi = 0; {720x348 2 страници}

ATT400C0= 0; {320x200 палитра 0: LightGreen, LightRed, Yellow; 1 страница}

ATT400C1= 1; {320x200 палитра 1: LightCyan, LightMagenta, White; 1 страни ца}

ATT400C2= 2; {320x200 палитра 2: Green, Red, Brown; 1 страница}

ATT400C3= 3; {320x200 палитра 3: Cyan, Magenta, LightGray; 1 страница}

ATT400Med= 4; {640x200 1 страница}

ATT400Hi= 5; {640x400 1 страница}

VGALo= 0; {640x200 16 цвята 4 страници}

VGAMed= 1; {640x350 16 цвята 2 страници}

VGAHi= 2; {640x480 16 цвята 1 страница}

PC3270Hi= 0; {720x350 1 страница}

IBM8514LO= 0; {640x480 256 цвята}

IBM8514HI= 1; {1024x768 256 цвята}
2.3. Процедура за инициализация на графичната система. - Първия параметър е номера на драйвера или нула (за автоматично тестване на системата и избор на най-подходящия драйвер). Втория параметър е номер на графичен режим. Третия параметър е низ, показващ къде се намира графичната библиотека. При празен низ библиотеката се търси в текущата директория.


procedure InitGraph(

var GraphDriver : integer; { Номер на графичния драйвер }

var GraphMode : integer; { Номер на графичния режим }

var PathToDriver : String; { Път до директорията на драйвера }



GraphDriver := Detect {неявно се повиква DetectGraph, която тества апаратурата и определя графичния драйвер}



PathToDriver := ''; {драйверът се търси в текущата директория}


Пример:


procedure Initialize;

var GraphDriver, GraphMode, ErrorCode:integer;

begin

GraphDriver:=Detect;

InitGraph(GraphDriver, GraphMode, 'c:\bp\bgi');

ErrorCode := GraphResult; { Съхранява кода на грешката }

if ErrorCode <> grOK then { Има ли грешка? }

begin

Writeln('Графична грешка: ', GraphErrorMsg(ErrorCode));

Halt(1);

end;

end;
Graphresult – връща код на грешката. Стойността се записва в променлива, от която се чете кода на грешката. Ако стойността на променливата е нула – няма грешка.

Detectgraph може да се извика неявно, ако първия параметър на инитграпх е нула. Може да се извика и явно – за автоматично тестване на системата.


2.4. Тестване на апаратурата на видеоадаптера и автоматично избиране на подходящ драйвер и графичен режим
procedure DetectGraph(var GraphDriver, GraphMode : integer);
- в GraphDriver се връща номерът на графичния драйвер

- в GraphMode се връща номерът на графичния режим с максимална разрешаваща способност


Пример:
var GraphDriver, GraphMode:integer;

begin

DetectGraph( GraphDriver, GraphMode);

InitGraph(GraphDriver, GraphMode, 'c:\bp\bgi');

...
Пример:
var GraphDriver, GraphMode:integer;

begin

DetectGraph( GraphDriver, GraphMode);

if (GraphDriver = EGA) or (GraphDriver = VGA) then

begin

GraphDriver := CGA;

GraphMode := CGAHi;

end;

InitGraph(GraphDriver, GraphMode, 'c:\bp\bgi');

...
2.5. Получаване на името на активния драйвер
function GetDriverName : string;
Пример:



OutText('Активен драйвер: ' + GetDriverName);


2.6. Затваряне на графичната система

procedure CloseGraph;

Освобождава паметта, отделена за графичната система и възстановява текстовия режим, съществуващ преди графичния.


3. Работа с графични режими
procedure GetModeRange(GraphDriver : integer; var LoMode, HiMode : integer);
Връща минималната и максималната стойност за номера на режима за посочения графичен драйвер (може да работи и в текстов режим).
Пример:

var Lowest, Highest : integer;

begin

GetModeRange(EGA64, Lowest, Highest);

writeln('Минимален графичен режим: ', Lowest); { Извежда 0}

writeln('Максимален графичен режим: ', Highest);{ Извежда 1}

...

  • function GetMaxMode : integer; Връща максималния номер на графичен режим за текущия зареден драйвер.




  • function GetModeName(GraphMode : integer) : string; Връща низ с името на зададения графичен режим.

Пример:

var I : integer;

begin

Initialize;

for I := 0 to GetMaxMode do

OutTextXY(10, 10 * (I+1), GetModeName(I)); { Извежда имената }

{ на всички режими за текущия зареден драйвер}


procedure SetGraphMode(Mode : integer);

Привежда системата в посочения графичен режим и почиства екрана. Всички параметри (палитра, стил на линията, запълване и т.н.) получават стойностите по подразбиране. Използва се за задаване на графичен режим, различен от установения с InitGraph и за връщане в определен графичен режим след RestoreCrtMode.
Пример:

var GraphDriver, GraphMode, ErrorCode:integer;

Lowest, Highest : integer;

begin


GraphDriver:=Detect;

InitGraph(GraphDriver, GraphMode, 'c:\bp\bgi');

ErrorCode := GraphResult;

if ErrorCode <> grOK then Halt(1);

GetModeRange(GraphDriver, Lowest, Highest);

SetGraphMode(Lowest); { Установява режима с минимална }

{ разрешаваща способност }
function GetMaxX : integer;

function GetMaxY : integer;

Връщат максималната X и Y стойности на CP за текущите графичен драйвер и режим, например при CGA в режим 320х200 GetMaxX връща стойност 319, а GetMaxY - 199.


function GetGraphMode : integer;

Връща номера на текущия графичен режим, установен с InitGraph или SetGraphMode.


procedure RestoreCrtMode;

Връща текстовия режим преди инициализацията с InitGraph, без да затваря графична та система. Използва се заедно със SetGraphMode за превключване между графичен и текстов режим.


Пример:

var GraphDriver, GraphMode:integer;

begin

GraphDriver:=Detect;

InitGraph(GraphDriver, GraphMode, 'c:\bp\bgi');

OutText ('Натиснете за излизане от графичен режим');

readln;

RestoreCrtMode;

writeln('Сега сме в текстов режим.');

writeln('Натиснете за връщане в графичен режим');

readln;

SetGraphMode(GetGraphMode);

OutText ('Отново сме в графичен режим.');

...
procedure GraphDefaults;

Присвоява на всички параметри на графичната система стойностите по подразбиране (рамка за наблюдение, палитра, цветове за рисуване и фон, стил и шаблон на линията, стил, цвят и шаблон на запълване, шрифт, стил и изравняване на текста, размер на символите). CP := (0,0).


4. Обработка на грешки

Дефинирани са следните символични константи за кодовете на грешките при изпълнение на графични операции:


const

grOk = 0; { Няма грешка }

grNoInitGraph = -1; { Неинициализирана графична система }

grNotDetected = -2; { Не е установен графичен хардуер }

grFileNotFound = -3; { Не е открит файл с графичен драйвер}

grInvalidDriver = -4; { Невалиден файл с графичен драйвер }

grNoLoadMem = -5; { Недостатъчна памет за драйвера }

grNoScanMem = -6; { Недостатъчна памет при сканиращо }

{ запълване }

grNoFloodMem = -7; { Недостатъчна памет при }

{ "наводняващо" запълване }

grFontNotFound = -8; { Не е открит файл с графичен шрифт }

grNoFontMem = -9; { Недостатъчна памет за шрифта }

grInvalidMode = -10; { Невалиден графичен режим за }

{ избрания драйвер }

grError = -11; { Недостатъчна памет в таблицата на }

{ шрифтовете за регистриране на нов шрифт }

grIOerror = -12; { Графична грешка при вход/изход }

grInvalidFont = -13; { Невалиден файл с шрифт }

grInvalidFontNum = -14; { Невалиден номер на шрифта }
function GraphResult : integer;

Връща код на грешката за последната графична операция. След повикване GraphResult се нулира, затова връщаната от нея стойност трябва да се запази в помощна променлива.


function GraphErrorMsg(ErrorCode : integer) : String;

Връща низ със съобщение за грешката, отговаряща на посочения код на грешката.

5. Работа с екрана, графични страници и графични прозорци

5.1. Управление на графични страници


procedure SetActivePage(Page : word);

Пренасочва графичния изход към графична страница с номер Page.


procedure SetVisualPage(Page : word);

На екрана се извежда съдържанието на графичната страница с номер Page.


Пример:

var GD, GM:integer;

begin

GD:=Detect;

InitGraph(GD, GM, 'c:\bp\bgi');

if (GD=HercMono) or (GD=EGA) or (GD=EGA64) or (GD=VGA) then

begin

SetVisualPage(0);

Circle(GetMaxX div 2, GetMaxY div 2, 100);

SetActivePage(1);

Rectangle(0,0, GetMaxX, GetMaxY);

readln;

SetVisualPage(1);

end;
procedure ClearDevice;

Почиства цялата активна страница (целия екран) - всички пиксели приемат цвета на фона, зададен със SetBkColor; CP:=(0,0).


5.2. Работа с графични прозорци

Използват се предварително дефинирани константи и типове:


const

ClipOn = true;

ClipOff = false;

type

ViewPortType = record

x1, y1, x2, y2 : integer;

Clip : boolean;

end;
procedure SetViewPort(x1, y1, x2, y2 : integer; Clip : boolean);

Задава графичен прозорец с координати на горния ляв ъгъл (x1, y1) и на долния десен ъгъл (x2, y2). CP :=(0,0) в горния ляв ъгъл на прозореца. Clip определя дали ще се прави изрязване при изчертаването по границите на прозореца. При грешно задаване на параметрите GraphResult връща стойност grError и графичният прозорец остава непроменен. SetViewPort(0,0,GetMaxX, GetMaxY,True) винаги задава като прозорец целия екран.


Пример:

SetViewPort(10,10,20,20,ClipOn);

Line(0,5,15,5); { Отсечката започва от абсолютни екранни }

{ координати (10,15) и завършва в (20,15)}

procedure ClearViewPort;

Почиства текущия графичен прозорец - всички пиксели приемат цвета на фона (Palette[0]), CP:=(0,0).


Пример:

var GD, GM:integer;

begin

InitGraph(GD, GM, 'c:\bp\bgi');

Rectangle(19,19,GetMaxX-19,GetMaxY-19);

SetViewPort(20,20,GetMaxX-20,GetMaxY-20,ClipOn);

OutTextXY(0,0,' clears the viewport');

readln;

ClearViewPort;
procedure GetViewSettings(var ViewPort : ViewPortType);

Връща в променлива от тип ViewPortType параметрите на текущия прозорец.


Пример:

var Old : ViewPortType;

GD, GM:integer;

begin

InitGraph(GD, GM, 'c:\bp\bgi');

SetViewPort(20,20,GetMaxX-20,GetMaxY-20,ClipOn);

{ Графичен изход в първи прозорец }

GetViewSettings(Old);

SetViewPort(10,10,120,120,ClipOff);

{ Графичен изход във втори прозорец }

with Old do SetViewPort(x1, y1, x2, y2, Clip);

{ Връщане към прозорец с параметрите на първия прозорец }

...
6. Работа с текущия указател (CP) и с отделни пиксели

function GetX : integer;

function GetY : integer;
Връщат X и Y координатата на CP. Стойностите са спрямо активния графичен прозорец.
procedure MoveTo(X, Y : integer);

Премества CP в позиция (X,Y) спрямо началото на текущия графичен прозорец. Ако SetViewPort е активна, X,Y се добавят към координатите на горния ляв ъгъл на текущия графичен прозорец. Стойността на CP се променя още от изпълнението на следните подпрограми:


ClearDevice LineRel OutText

ClearViewPort LineTo SetGraphMode

GraphDefaults MoveRel SetViewPort

InitGraph


Пример:

MoveTo(0,0); { Горен ляв ъгъл на графичния прозорец }

LineTo(10,10);

{ CP в абсолютни координати (10,10), GetX връща стойност 10 }

SetViewPort(0,0,GetMaxX,GetMaxY, ClipOn);

{ CP в абсолютни координати (0,0), GetX връща стойност 0 }

MoveTo(5,5);

{ CP в абсолютни координати (5,5), GetX връща стойност 5 }

SetViewPort(10,10,100,100, ClipOn);

{ CP в абсолютни координати (10,10), GetX връща стойност 0 }

MoveTo(5,5);

{ CP в абсолютни координати (15,15), GetX връща стойност 5 }
procedure MoveRel(Dx, Dy : integer);

Премества CP в позиция (GetX+Dx, GetY+Dy).


procedure PutPixel(X, Y : integer; Color : word);

Оцветява пиксел с координати (X,Y) с посочения цвят Color (атрибутът на пиксела във видеопаметта приема стойност Color).


Пример:

var Color : word;

begin

Initialize;

Color := GetMaxColor;

repeat

PutPixel(Random(100), Random(100), Color);

Delay(10);

until KeyPressed;

function GetPixel(X, Y : integer) : word;

Връща стойността на атрибута на пиксела с координати (X,Y).

Пример:

var PixelColor : word;

begin

Initialize;

PixelColor := GetPixel(10,10);

if PixelColor = 0 then PutPixel(10,10,GetMaxColor);
7. Управление на цветовете - Използват се предварително дефинирани константи и типове:

const

{ Цветове за SetPalette и SetAllPalette: }

Black = 0;

Blue = 1;

Green = 2;

Cyan = 3;

Red = 4;

Magenta = 5;

Brown = 6;

LightGray = 7;

DarkGray = 8;

LightBlue = 9;

LightGreen = 10;

LightCyan = 11;

LightRed = 12;

LightMagenta = 13;

Yellow = 14;

White = 15;

{ Цветове за 8514 за задаване на стандартните EGA цветове }

EGABlack = 0; { Тъмни цветове }

EGABlue = 1;

EGAGreen = 2;

EGACyan = 3;

EGARed = 4;

EGAMagenta = 5;

EGABrown = 20;

EGALightgray = 7;

EGADarkgray = 56; { Светли цветове }

EGALightblue = 57;

EGALightgreen = 58;

EGALightcyan = 59;

EGALightred = 60;

EGALightmagenta = 61;

EGAYellow = 62;

EGAWhite = 63;

MaxColors = 15;

type

PaletteType = record

Size : byte;

Colors : array[0..MaxColors] of shortint;

end;
7.1. Управление на палитрата
procedure SetAllPalette(var Palette : PaletteType);

Сменя текущите цветове на палитрата само за EGA, EGA64 и VGA (без режима с 256 цвята). Стойностите за цветовете могат да бъдат само от 0 до 15 (в зависимост от графичния драйвер и режим).


Пример:

var Pal : PaletteType; I : integer;

begin

Initialize;

for I := 1 to GetMaxColor do

begin

SetColor(I);

Line(0, 10*I, 100, 10*I);

end;

readln;

with Pal do

begin

Size := 4;

Colors[0] := Red; { Условен цвят 0 - цвят на фона }

Colors[1] := Cyan; { Условен цвят 1 }

Colors[2] := Blue; { Условен цвят 2 }

Colors[3] := Green; { Условен цвят 3 }

end;

SetAllPalette(Pal); { На екрана се сменят цветовете }

{ с номера от 0 до 3 }
procedure SetPalette(ColorNum : word; Color : shortint);

Сменя цвят от палитрата с номер ColorNum с цвят Color. Стойността на ColorNum може да бъде само от 0 до 15 (в зависимост от графичния драйвер и режим).


Пример:

var I : integer; MaxColor : word;

begin

Initialize;

for I := 1 to GetMaxColor do

begin

SetColor(I);

Line(0, 10*I, 100, 10*I);

end;

readln;

MaxColor := GetMaxColor + 1;

repeat

SetPalette(Random(MaxColor),Random(MaxColor));

until KeyPressed;
function GetPaletteSize : integer;

Връща максималния брой на възможните цветове в палитрата за текущия графичен режим, например за EGA в цветен режим връща стойност 16.


procedure GetPalette(var Palette : PaletteType);

Връща текущата палитра в променлива от тип PaletteType (размер на палитрата и цветове в нея).


Пример:

var Pal : PaletteType; I : integer; S : string;

begin

Initialize;

GetPalette(Pal);

if Pal.Size <> 1 then

for I := 0 to Pal.Size-1 do

begin

SetColor(I); Str(I, S);

OutTextXY(0, 10*I, 'Color '+ S);

end;

procedure GetDefaultPalette(var Palette : PaletteType);

Връща стойностите за палитрата, установена от InitGraph, в променлива от тип Pal

etteType.

Пример:

var OldPal : PaletteType; I : integer;

begin

Initialize;

GetDefaultPalette(OldPal);

if OldPal.Size <> 1 then

for I := 0 to OldPal.Size-1 do

begin

SetColor(OldPal.Colors[I]);

OutTextXY(0, 10*I, 'Color '+ chr(I));

end;
procedure SetRGBPalette(ColorNum, RedValue, GreenValue, BlueValue : integer);

Променя стойности в палитрата за драйвери IBM8514 и VGA. ColorNum определя номер на цвят в палитрата (от 0 до 255 за IBM8514 и от 0 до 15 за VGA в режим с 256К цвята), а RedValue, GreenValue и BlueValue задават стойности за червената, зелената и синята съставка на цвета с номер ColorNum. От RedValue, GreenValue и BlueValue се използва само младшият байт и то само шестте старши разряда.


Пример:

var Driver, Mode, I: integer;

begin

Driver := IBM8514;

Mode := IBM8514Hi; { IBM8514 не се открива с DETECT }

InitGraph(Driver, Mode, '');

SetRGBPalette(7, $00, $00, $FC); { Условен цвят 7 - син }
7.2. Управление на цветовете
procedure SetColor(Color : word);

Задава текущ цвят на извеждане - цвят с номер Color (от 0 до 15 в зависимост от текущия драйвер и режим) от текущата палитра става текущ цвят на рисуване.


procedure SetBkColor(ColorNum : word);

Задава цвят на фона - цвят с номер Color (от 0 до 15 в зависимост от текущия драйвер и режим) от текущата палитра става текущ цвят на фона.


Пример:

SetBkColor(3); { Цвят с номер 3 става текущ цвят на фона }

SetBkColor(0); { Винаги ЧЕРЕН цвят на фона, независимо от това }

{ какъв е цвят с номер 0 от текущата палитра }
function GetColor : word;

Връща текущия цвят на рисуване (номер на цвят в текущата палитра).


function GetBkColor : word;

Връща цвета на фона (стойност от 0 до GetMaxColor).


function GetMaxColor : word;

Връща максималния номер на цвят, който може да се предаде към процедурата SetColor (максималната стойност на атрибута на пиксела).
Каталог: upload -> 2015 -> universita -> 2007-2008 -> Komp.%20grafika -> komputerna%20grafika -> materiali
materiali -> 1Определение на кг
materiali -> Връзката компютър аниматор Увод 1 стр. Същината на въпроса История на Компютърната Графика
2007-2008 -> Реферат тема: историческо развитие на интернет технологиите изготвил: Антон Тодоров Георгиев Фак. №30593
2007-2008 -> Електронна музика
2007-2008 -> Bmp bmp (Bitmap File) е графичен формат, създаден от Micro$oft, и е основният използван в Windows. Разширението на файловете идва от термина BitMaP, който в превод означава "карта на битовете"
2007-2008 -> Формати за цифрова музика: Ogg Vorbis
2007-2008 -> Курсов проект по “cstb 714 компютърна анимация” Задание за курсова работа
2007-2008 -> Създаване на костна система и ik връзки на персонаж (ik setup) в 3d studio max 7


Поделитесь с Вашими друзьями:


База данных защищена авторским правом ©obuch.info 2019
отнасят до администрацията

    Начална страница