Graph moduli. Graph moduli turli xil displeylar (CGA, FGA, VGA, MCCA, Hercules, PS3270, ATT6300 va IBM8514 va boshqalar) adapterlar grafik rejimlarini to‘liq boshharuvuni ta’minlovchi qism programmalar kutubxonasidir. Kutubxonada asosiy (nuqta, chiziq, aylana va boshqalar) va qo‘shimcha (ko‘pburchaklar, shakllarni ranga bo‘yash, matnni chop qilish va boshqalar) grafika protsedura va funksiyalarini o‘z ichiga oladi.
Graph modulidagi protsedura va funksiyalarni ishga tushirish uchun ishchi katalogda zarur grafika drayverlari (BGI fayllari), agar shtrixli shriftlar ishlatiladigan bo‘lsa, shrift fayllari (SHR fayllari) bo‘lishi kerak. Bundan tashhari, kompilator uchun GRAPH.TPU moduliga murojat qilish imkoniyati bo‘lishi kerak (bu modul TURBO.TPL moduli tarkibiga kirmaydi).
BGI fayllari. BGI fayllari Borland firmasining grafik interfeysidir (Borland Graphik Interface). Bu fayllar programmani grafik qurilmalari bilan ishlashini ta’minlaydi. Programmani grafik rejimda ishlashidan oldin InitGraph protsedurasi zarur adapter turini aniqlaydi va zarur BGI drayverni xotiraga yuklaydi. ClouseGraph protsedurasi grafik drayverni xotiradan chaqiradi va videoadapterni matn rejimda ishlashga o‘tkazadi.
Quyida displey turiga mos ravishda ishchi katalogida bo‘lishi kerak bo‘lgan fayl-drayverlar ro‘yxati keltirilgan:
CGA.BGI - IBM CGA, MCCA displeylar uchun drayver;
FGAVGA.DGI - IBM 8514 displeylar uchun drayver;
IBM8514.BGI - IBM8514 displeylar uchun drayver.
InitGraph protsedurasi. Yuqorida qayd qilinganidan bu protsedura displeyni grafik ish rejimiga o‘tkazadi. Protsedura quyidagi ko‘rinishda e’lon qilingan:
InitGraph (Var Graphdriver: Integer: adapter turi
Var GraphMode: Integer: grafika rejimi
DriverPatu: String); drayverga yo‘q
Graph modulida grafik adapter turini berish uchun konstantalar aniqlangan:
Const
Detect 0; avtoaniqlov
CGA 1; SGA adapteri
MCGA 2; MCGA adapteri
EGA 3; EGA adapteri, 256 kb
EGAGU 4; EGA adapteri, 64 kb
EGAMono 5; EGA adapteri, mono displey uchun
VGA 9; VGA adapter
Agar GraphDriver parametriga Detect qiymati yuklansa, tizim avtoaniqlov rejimini ishga tushiradi. Agar bir nechta grafika rejimini ishga tushirish imkoniyati mavjud bo‘lsa, ularning eng yuqori imkoniyatlisi ishga tushiriladi. GraphMode parametri aniqlangan adapter uchun ish rejimi nomerini beradi.
Masalan, VGA drayveri uchun quyidagi ish rejimlari aniqlangan:
VGALo0, ekran imkoniyati 640*200, 16 rang, 4 ta videosahifalar;
VGAMed1, ekran imkoniyati 640*350, 16 rang 1 ta videosahifa.
DriverRatu parametri zarur drayver fayllari joylashgan katalogcha yo‘lini ko‘rsatadi. Agar parametr qiymati (bo‘sh satr) berilsa, drayverlar joriy (ishchi) katalogda bo‘lishi kerak.
CloseGraph protsedurasi. Grafik rejimdagi ishni tugatish uchun CloseGraph protsedurasini chaqirish kerak Bu protsedura parametrga ega emas va u bajarilish natijasida ekran tozalanadi va adapter matn rejimiga o‘tkaziladi, xotiradan BGI drayverlari va shtrixli shriftlar xotiradan o‘chiriladi.
GraphResult funksiyasi. Grafik rejimga o‘tish muvoffaqiyatsiz bo‘lishi mumkin. Bunga sabab-Graph.tpu yoki zarur BGI fayllarini ishchi katalogda bo‘lmasligi yoki talab qilingan adapterning amalda mavjud bo‘lmasligi va boshqalar. Grafik rejimga o‘tish qanday amalga oshganligini
GraphResult: Integer;
funksiyasining javobiga harab aniqlash mumkin. Bu funksiya oxirgi chaqirilgan grafika protseduralari yoki funksiyalari muvoffaqiyatli yoki muvoffaqiyatsiz amalga oshirilganligini bildiradi. GraphResult funksiyasi Bar, Bar30, DrawPoly, FillPoly InitGraph, SetFillPetteru, SetFillStyle va boshqa grafik protsedura va funksiyalarining chaqirilish natijalarini bildiradi.
GraphResult funksiyasi javobi bo‘lgan kodlar jadvali va ularning izohlari mavjud bo‘lib,
GraphErrorMsg:string;
funksiyasi yordamida bu izoh-satrni ekranga chiqarish mumkin odatda GraphResult va GraphErrorMsg funksiyalar birgaliknda ishlatiladi.
Grafik rejimni initsializatsiya qilishning (yuklashning) oddiy programmasi:
Uses Graph; {Graph moduli bog‘langan}
Procedure GrInit; {grafik rejim initsializatsiyasi}
Var
GraphDriver : Integer; {grafik adapter uchun}
GraphMode : Integer; {grafik rejim uchun}
ErrorCode : Integer; {xatolik kodi uchun}
Begin
GraphDriver := Detect; {avtoaniqlash rejimi}
InitGraph(GraphDriver, GraphMode, ‘‘); {initsializatsiya}
ErrorCode := Graph Result; {initsializatsiya natijasi}
if ErrorCode<>grOk then{agar ifoda “rost” bo‘lsa, u holda ... }
begin
WriteLn(‘Grafikada xato’, GraphErrorMsg(ErrorCode));
WriteLn(‘Programma ishi to‘xtatildi.’);
Halt(1);
end; {if}
End;
{initsializatsiyaga misol}
Begin
GrInit; {initsializatsiya qilish}
Line(0, 0, GetMexX, GetMaxY); {grafika bilan ishlash...}
ReadLn; {Enter bosilgancha kutish}
CloseGraph {grafik rejimni yopish}
End.
Grafika rejimida ekran adreslanuvchi nuqtalarning to‘g‘ri burchakli massiv ko‘rinishida bo‘ladi va ixtiyoriy tasvir yoqib yoki o‘chib turgan piksellar (tasvirning minimal elementi) kompozitsiyasidan hosil bo‘ladi. Bu nuqtalar ikkita butun son - nx - nuqtaning gorizontal nomeri va ny nuqtaning vertikal nomeri bilan adreslanadi:
0nxnx_max,
0nyny_max,
bu yerda nx_max va ny_max mos ravishda gorizontal va vertikal bo‘yicha adreslanishi mumkin bo‘lgan sondan bitta kam sonlar. Bu sonlar grafika adapteri ish rejimi orqali aniqlanadi, masalan VGA uchun 1-rejimda ekran 640*350, ya’ni nx_max 639 va ny_max 349.
Turbo Paskalda yuqoridagi nx_max va ny_max larni aniqlovchi
GetMaxX: Integer;
GetMaxY: Integer.
funksiyalari mavjud va nuqta koordinatalari shu sonlar chegarasida bo‘lishi kerak, aks holda nuqtalar ekranda tasvirlanmaydi.
Ekranning chap yuqori burchagidagi nuqta koordinatasi (0,0) bo‘ladi. (nx,ny) qurilma koordinatalari ham deyiladi va ular faqat butun qiymatlarni qabul qilishi mumkin.
Kompyuter grafikasida yana ikkita koordinata tizimi qabul qilingan. Birinchisi (px, py)- ekran koordinata tizimi bo‘lib, unda px- gorizontal bo‘yicha ekrandagi masofa, py-gorizontal bo‘yicha. Bu yerda koordinata o‘qlari millimetr va duymlarda o‘lchanadi. Ikkinchi koordinata tizimi - dunyoviy (olam) koodinata tizimidir. U (x,y) dekart tizimi bo‘lib, programma tuzuvchisi tomonidan aniqlanadi va tasvirlash qurilmasiga bog‘liq bo‘lmaydi:
XminxXmax
YminyYmax
Dekart koordinatalar tizimida X va Y o‘zgarish diapazonlari (Xmin, Xmax, Ymin, Ymax) mavhum matematik ikki o‘lchamli fazoning to‘g‘ri burchakli sohasini aniqlaydi. Bu sohani qurilma koordinatasiga akslantirish quyidagicha amalga oshiriladi:
nx: Round ((x-xmin)(xmax-xmin))*nx_max;
ny: Round((y-ymin)(ymax-ymin))*ny_max
bu yerda (x,y)- dekart koordinatasidagi nuqta va uning ekrandagi koordinatasi (nx,ny) bo‘ladi.
Do'stlaringiz bilan baham: |