Kỹ thuật Đồ hoạ máy tính
Phụ lục
Chế độ Graphics
1. Chế độ Graphic
ở chế độ Text (văn bản) mà hình đ−ợc chia làm 80 cột và 25 hàng và toạ độ của nó
là (1,1)-(80,25) có nghĩa là gồm có 25 hàng mỗi hàng chứa đ−ợc 80 ký tự.
Để có thể vẽ đồ thị, tô màu hình ảnh . trên máy vi tính ta phải chuyển sang chế độ
Graphic. Trong chế độ này màn hình đ−ợc cấu tạo nh− là ma trận điểm hay l−ới
vuông các điểm, t−ơng ứng với một vùng nhớ trên màn hình. Mỗi điểm sáng trên
màn hình đ−ợc gọi là một Pixel
- Trong chế độ đơn sắc mỗi Pixel t−ơng ứng với một Bit
- Trong chế độ 4 màu mỗi Pixel t−ơng ứng với một 2 bit
- Trong chế độ 16 màu mỗi Pixel t−ơng ứng với 4 Bit
- Trong chế độ 256 màu mỗi Pixel t−ơng ứng với 8 Bit
Có nhiều kiểu màn hình khác nhau, sau đây là các kiểu tiêu biểu th−ờng gặp nhất :
a. CGA (Color Graphic Adapter) : có 2 chế độ
- Chế độ phân giải cao : 640 X 200 đen trắng
- Chế độ phân giải trung bình : 320 X 200 4 màu
b. Hercule (MGDA : Monochrome Graphic Display Adapter) :
là mạch điều khiển màn hình đơn sắc với độ phân giải cao 720 X 348
c. EGA (Enhanced) :
độ phân giải 640 X 350 16 màu hoặc 320 X 200 256 màu
d. VGA (Video Graphic Array) :
640 X 480 16 màu hoặc 256 màu
e. SVGA (Super Video Graphic Array) :
1024 X 768 256 màu
2. Các file cần thiết cho việc vẽ đồ hoạ :
Graph.TPU
*.BGI (Borland Graphic Interface) là các file chứa các điều khiển t−ơng
ứng với các màn hình khác nhau : CGA.BGI, EGAVGA.BGI, HERC.BGI .
*.CHR là các file Font chữ trong chế độ đồ hoạ :
Goth.CHR (chữ Gothic), Litt.CHR (Small Font), Sans.CHR (Sans Serif), Trip.
CHR (cao gấp 3)
Và ở đầu ch−ơng trình phải khai báo sử dụng Unit Graph.TPU :
Uses Graph;
3. Thủ tục khởi tạo đồ hoạ :
Thủ tục khởi tạo chế độ đồ hoạ có dạng sau :
8 trang |
Chia sẻ: tlsuongmuoi | Lượt xem: 2159 | Lượt tải: 0
Bạn đang xem nội dung tài liệu Kỹ thuật Đồ hoạ máy tính, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Kü thuËt §å ho¹ m¸y tÝnh
111
Phô lôc
ChÕ ®é Graphics
1. ChÕ ®é Graphic
ë chÕ ®é Text (v¨n b¶n) mµ h×nh ®−îc chia lµm 80 cét vµ 25 hµng vµ to¹ ®é cña nã
lµ (1,1)-(80,25) cã nghÜa lµ gåm cã 25 hµng mçi hµng chøa ®−îc 80 ký tù.
§Ó cã thÓ vÏ ®å thÞ, t« mµu h×nh ¶nh ... trªn m¸y vi tÝnh ta ph¶i chuyÓn sang chÕ ®é
Graphic. Trong chÕ ®é nµy mµn h×nh ®−îc cÊu t¹o nh− lµ ma trËn ®iÓm hay l−íi
vu«ng c¸c ®iÓm, t−¬ng øng víi mét vïng nhí trªn mµn h×nh. Mçi ®iÓm s¸ng trªn
mµn h×nh ®−îc gäi lµ mét Pixel
- Trong chÕ ®é ®¬n s¾c mçi Pixel t−¬ng øng víi mét Bit
- Trong chÕ ®é 4 mµu mçi Pixel t−¬ng øng víi mét 2 bit
- Trong chÕ ®é 16 mµu mçi Pixel t−¬ng øng víi 4 Bit
- Trong chÕ ®é 256 mµu mçi Pixel t−¬ng øng víi 8 Bit
Cã nhiÒu kiÓu mµn h×nh kh¸c nhau, sau ®©y lµ c¸c kiÓu tiªu biÓu th−êng gÆp nhÊt :
a. CGA (Color Graphic Adapter) : cã 2 chÕ ®é
- ChÕ ®é ph©n gi¶i cao : 640 X 200 ®en tr¾ng
- ChÕ ®é ph©n gi¶i trung b×nh : 320 X 200 4 mµu
b. Hercule (MGDA : Monochrome Graphic Display Adapter) :
lµ m¹ch ®iÒu khiÓn mµn h×nh ®¬n s¾c víi ®é ph©n gi¶i cao 720 X 348
c. EGA (Enhanced) :
®é ph©n gi¶i 640 X 350 16 mµu hoÆc 320 X 200 256 mµu
d. VGA (Video Graphic Array) :
640 X 480 16 mµu hoÆc 256 mµu
e. SVGA (Super Video Graphic Array) :
1024 X 768 256 mµu
2. C¸c file cÇn thiÕt cho viÖc vÏ ®å ho¹ :
Graph.TPU
*.BGI (Borland Graphic Interface) lµ c¸c file chøa c¸c ®iÒu khiÓn t−¬ng
øng víi c¸c mµn h×nh kh¸c nhau : CGA.BGI, EGAVGA.BGI, HERC.BGI...
*.CHR lµ c¸c file Font ch÷ trong chÕ ®é ®å ho¹ :
Goth.CHR (ch÷ Gothic), Litt.CHR (Small Font), Sans.CHR (Sans Serif), Trip.
CHR (cao gÊp 3)
Vµ ë ®Çu ch−¬ng tr×nh ph¶i khai b¸o sö dông Unit Graph.TPU :
Uses Graph;
3. Thñ tôc khëi t¹o ®å ho¹ :
Thñ tôc khëi t¹o chÕ ®é ®å ho¹ cã d¹ng sau :
Kü thuËt §å ho¹ m¸y tÝnh
112
InitGraph(Var GraphDriver, GraphMode : Integer; Path : String);
Trong ®ã Path lµ tham sè b¸o cho PASCAL biÕt th− môc chøa c¸c file ®iÒu khiÓn
®å ho¹ cña Turbo Pascal (c¸c tÖp ®· nãi ë trªn)
GraphicDriver lµ tham biÕn nguyªn, chøa gi¸ trÞ x¸c ®Þnh kiÓu mµn h×nh :
0 Detect
1 CGA
2 MCGA
3 EGA
4 EGA64
5 EGAMono
6 IBM8514
7 HercMono
8 ATT400
9 VGA
10 PC3270
Mçi mét kiÓu mµn h×nh l¹i cã nhiÒu chÕ ®é ®å ho¹ (GraphicMode) t−¬ng øng víi ®é
ph©n gi¶i vµ vµ b¶ng mµu kh¸c nhau. GraphicMode lµ tham biÕn nguyªn, chøa gi¸
trÞ x¸c ®Þnh Mode ®å ho¹ b¶ng sau cho biÕt c¸c gi¸ trÞ GraphDriver, GraphMode
Graphic Driver Graphic Mode §é ph©n gi¶i Sè mµu
CGA CGAC0,1,2,3,4 320 X 200
CGAHi 640 X 200
MCGA MCGAC0,1,2,3 320 X 200
MCGAHi 640 X 480
EGA EGALo 640 X 200
EGAHi 640 X 350
EGA64 EGA64Lo 640 X 200
EGA64Hi 640 X 350
EGAMono EGAMonoHi 640 X 3500
VGA VGALo 640 X 200
VGAHi 640 X 480
HercMono HercMonoHi 720 X 348
ATT400 ATT400C0,1,2,3 320 X 200
ATT400Hi 640 X 400
PC3270 PC3270 720 X 350
IBM8514 IBM8514Lo 640 X 480 256 mµu
IBM8514Hi 1024 X 768 256 mµu
Trong lêi gäi thñ tôc InitGraph(GD, GM, Path), nÕu tr−íc ®ã ta g¸n
GD: = Detect (=0) th× thñ tôc InitGraph ph¶i tù x¸c ®Þnh lÊy kiÓu mµn h×nh còng nh−
Mode ®å ho¹ sao cho tèt nhÊt mµ m¸y cã thÓ cã ®−îc.
Trong tr−êng hîp mµn h×nh cã thÓ ch¹y nhiÒu Mode kh¸c nhau, ta cã thÓ tù chän lÊy
GraphDriver vµ GraphMode b»ng c¸ch g¸n gi¸ trÞ thÝch hîp cho GD vµ GM tr−íc
khi gäi thñ tôc InitGraph :
GD:=EGA; GM:=EGAHi;
InitGraph(GD,GM,'C:\TP\BGI');
Kü thuËt §å ho¹ m¸y tÝnh
113
hoÆc còng cã thÓ viÕt d−íi d¹ng sè :
GD:=3; GM:=1;
InitGraph(GD,GM,'C:\TP\BGI');
Hai hµm GetDriverName; vµ GetModeName(GM) cho ta tªn cña Driver vµ Mode
mµn h×nh øng víi hai sè GD, GM
VÝ dô 1:
Uses Crt,Graph;
Var
GD,GM : Integer;
Begin
GD:=3; GM:=1;
InitGraph(GD,GM,' ');
DirectVideo:=False;
Writeln(GetDriverName);
Writeln(GetModeName(GM));
Readln;
CloseGraph;
End.
Khi khëi t¹o chÕ ®é ®å ho¹ xuÊt hiÖn hµm GraphResult cã c¸c gi¸ trÞ sau
Tªn h»ng Gi¸ trÞ sè KiÓu lçi
grOk 0 Ok kh«ng cã lçi
grNoInitGraph -1 Ch−a khëi t¹o ®−îc
grNotDetected -2 Kh«ng cã phÇn cøng ®å ho¹
grFileNotFound -3 ThiÕu tÖp EGAVGA.BGI, Graph.TPU
VÝ dô 2 :
Uses Crt, Graph;
Var
gd, gm : Integer;
Begin
gd:=0;
InitGraph(gd,gm,' ');
If GraphResult 0 Then Halt;
Circle(320,240,200);
Readln;
End.
4. C¸c lÖnh ®å ho¹ :
SetColor(m); ®Æt mµu cho ®−êng vÏ víi m nguyªn : tõ 0 ®Õn 15 (Black, Blue...)
SetBkColor(m); ®Æt mµu nÒn cho mµn h×nh
MoveTo(x,y); di chuyÓn con trá ®Õn ®iÓm cã to¹ ®é (x,y)
LineTo(x,y); vÏ ®o¹n th¼ng tõ vÞ trÝ con trá ®Õn ®iÓm cã to¹ ®é (x,y)
LineRel(dx,dy); vÏ ®o¹n th¼ng lµ ®−êng chÐo chÝnh cña h×nh ch÷ nhËt gãc trªn bªn
tr¸i lµ tõ vÞ trÝ con trá vµ 2 c¹nh lµ dx, dy
Line(x1,y1,x2,y2); vÏ ®o¹n th¼ng tõ ®iÓm (x1,y1) ®Õn ®iÓm cã to¹ ®é (x2,y2)
Kü thuËt §å ho¹ m¸y tÝnh
114
GetX; cho hoµnh ®é cña con trá
GetY; cho tung ®é cña con trá
GetMaxX; cho hoµnh ®é lín nhÊt cña mµn h×nh (639)
GetMaxY; cho tung ®é lín nhÊt cña mµn h×nh (479)
PutPixel(x,y,m); vÏ ®iÓm cã to¹ ®é lµ (x,y) mµu lµ m
m:=GetPixel(x,y); cho mµu cña ®iÓm (x,y)
Circle(x,y,r); vÏ ®−êng trßn t©m lµ ®iÓm (x,y) b¸n kÝnh lµ r
Arc(x,y,start,end,r); vÏ cung trßn t©m lµ (x,y) b¸n kÝnh lµ r start lµ gãc b¾t ®Çu, end
lµ gãc cuèi (start vµ end tõ 0-360)
Ellipse(x,y,start,end,rx,ry); vÏ cung elip t©m lµ (x,y) b¸n kÝnh ngang lµ rx, b¸n kÝnh
®øng lµ ry, start lµ gãc b¾t ®Çu, end lµ gãc cuèi (start vµ end tõ 0-360)
PieSlice(x,y,start,end,r); vÏ h×nh qu¹t ®Æc t©m lµ (x,y) b¸n kÝnh lµ r start lµ gãc b¾t
®Çu, end lµ gãc cuèi (start vµ end tõ 0-360)
Rectangle(x1,y1,x2,y2); vÏ h×nh ch÷ nhËt ®Ønh trªn bªn tr¸i lµ (x1,y1), ®Ønh d−íi
bªn ph¶i lµ (x2,y2)
Bar(x1,y1,x2,y2); vÏ h×nh ch÷ nhËt ®Æc ®Ønh trªn bªn tr¸i lµ (x1,y1), ®Ønh d−íi bªn
ph¶i lµ (x2,y2)
Bar3D(x1,y1,x2,y2,depth,top); vÏ h×nh hép ch÷ nhËt ®Ønh trªn bªn tr¸i lµ (x1,y1),
®Ønh d−íi bªn ph¶i lµ (x2,y2), depth lµ chiÒu s©u, top lµ mét biÕn kiÓu Boolean b»ng
True nÕu cã vÏ 3 ®−êng phÝa trªn b»ng False nÕu cã vÏ
SetWriteMode(WriteMode: Integer); ®Æt mode vÏ ®−êng th¼ng. NÕu
WriteMode=CopyPut (=0) : vÏ ®−êng th¼ng nh− b×nh th−êng; cßn nÕu
WriteMode=XORPut (=1) : vÏ ®−êng th¼ng, nÕu ®−êng th¼ng ®· cã th× xo¸ nÕu
ch−a cã th× vÏ (XOR víi tõng ®iÓm ¶nh trªn mµn h×nh)
VÝ dô :
Uses Crt, Graph;
Var
gd, gm, x, y, m, dem : Integer;
Begin
gd:=0;
InitGraph(gd,gm,' ');
Bar3d(100,100,300,300,50,True);
Readln;
ClearDevice;
Bar3d(100,100,300,300,50,False);
Readln;
dem:=0;
MoveTo(320,240);
Repeat
x:=Random(640);
y:=Random(480);
m:=Random(15);
SetColor(m);
{LineTo(x,y);}
PutPixel(x,y,m);
Kü thuËt §å ho¹ m¸y tÝnh
115
Delay(10);
dem:=dem+1;
If dem=500 Then
Begin
dem:=0;
ClearDevice;
End;
Until KeyPressed;
Readln;
Repeat
m:=Random(15);
SetBkColor(m);
ClearDevice;
Delay(300);
Until KeyPressed;
SetBkColor(Black);
ClearDevice;
CloseGraph;
End.
5. Lµm h×nh chuyÓn ®éng :
Cho z: Word; p : Pointer; x1,y1,x2,y2 : Integer;
z:=ImageSize(x1,y1,x2,y2); z b»ng sè byte ®ñ chøa h×nh ¶nh cña h×nh ch÷ nhËt
(x1,y1,x2,y2)
Getmem(p,z); t¹o vïng nhí míi cã kÝch cì b»ng z byte vµ p trá ®Õn vïng nhí ®ã
GetImage(x1,y1,x2,y2,p^); ®−a h×nh ¶nh vµo vïng nhí mµ p trá tíi.
PutImage(x,y,p^,PutMode);
Víi PutMode=XorPut; OrPut; AndPut; CopyPut;
VÝ dô :
Uses Crt, Graph;
Var
z: Word;
p: Pointer;
x1,y1,x2,y2 : Integer;
gd, gm : Integer;
Begin
gd:=0;
InitGraph(gd,gm,' ');
Circle(20,20,10);
Circle(20,20,5);
PutPixel(20,20,Red);
x1:=0; y1:=0;x2:=40;y2:=40;
z:=ImageSize(x1,y1,x2,y2);
Getmem(p,z);
GetImage(x1,y1,x2,y2,p^);
Kü thuËt §å ho¹ m¸y tÝnh
116
PutImage(x1,y1,p^,XorPut);
y1:=240;
For x1:=1 To 640 Do
Begin
PutImage(x1,y1,p^,XorPut);
Delay(10);
PutImage(x1,y1,p^,XorPut);
End;
CloseGraph;
End.
6. Kh¸i niÖm ViewPort
ViewPort (cöa sæ nh×n) lµ mét h×nh ch÷ nhËt trong mµn h×nh vµ khi ta thiÕt lËp th×
c¸c thao t¸c vÒ ®å ho¹ ®−îc thùc hiÖn ttrong ®ã nh− lµ mét mµn ¶nh nhá.
§Ó ®Æt ViewPort ta dïng lÖnh
SetViewPort(x1,y1,x2,y2,Clip);
x1,y1,x2,y2 lµ c¸c sè nguyªn :
x1,x2: 0-639;
y1,y2: 0-479;
Clip : Boolean b»ng True nÕu kh«ng cho phÐp vÏ ra ngoµi, b»ng False nÕu cho phep
{ClipOn=True, ClipOff=False}
Vµ khi ®ã gèc to¹ ®é ®−îc chuyÓn vÒ ®iÓm cã to¹ ®é lµ (x1,y1) vµ to¹ ®é míi cña
®iÓm nµy lµ (0,0).
VÝ dô :
Uses Crt, Graph;
Var
x1,y1,x2,y2 : Integer;
gd, gm : Integer;
Begin
gd:=0;
InitGraph(gd,gm,' ');
SetViewPort(320,240,639,479,True);
Circle(0,0,200);
Readln;
ClearviewPort;
SetViewPort(320,240,639,479,False);
ClearViewPort;
Circle(0,0,200);
Readln;
CloseGraph;
End.
7. HiÓn thÞ v¨n b¶n trong chÕ ®é ®å ho¹
DirectVideo:=False; cho phÐp dïng lÖnh Write, Writeln trong chÕ ®é ®å ho¹
OutText(xau); cho hiÖn néi dung x©u ë t¹i vÞ trÝ con trá
Kü thuËt §å ho¹ m¸y tÝnh
117
OutTextXY(a,b,xau); cho hiÖn néi dung x©u ë t¹i ®iÓm (x,b)
SetTextStyle(Font,huong,kichco);
font : 0 : b×nh th−êng
1 : Cao gÊp 3
2 : ch÷ nhá
3 : ch÷ Sans Serif
4 : KiÓu g«-tic (Gothic)
...........
12 *.CHR cã bao nhiªu tÖp *.CHR th× cã bÊy nhiªu ch÷
Huong : 0 : h−íng in ngang
1 : h−íng in ®−íng
Kichco : 1-10 lµ hÖ sè phãng to cña ch÷
SetTextJustify(ngang,dung);
ngang : 0 : LeftText : vÞ trÝ hiÖn t¹i cña con trá ë bªn tr¸i cña Text
1 : CenterText : vÞ trÝ hiÖn t¹i cña con trá ë gi÷a cña Text
2 : RightText : vÞ trÝ hiÖn t¹i cña con trá ë bªn ph¶i cña Text
dung : 0 : BottomText : vÞ trÝ hiÖn t¹i cña con trá ë bªn d−íi cña Text
1 : CenterText : vÞ trÝ hiÖn t¹i cña con trá ë gi÷a theo chiÒu ®øng cña Text
2 : TopText : vÞ trÝ hiÖn t¹i cña con trá ë bªn trªn cña Text
8. T« mµu miÒn kÝn
Tr−íc khi t« mµu miÒn nµo ®ã thi ta ph¶i ®Æt mÉu nÒn cÇn t« b»ng lÖnh
SetFillStyle(Pattern, color);
Color : lµ mµu cÇn t« cho miÒn kÝn tõ 0-15
Pattern : lµ mÉu nÒn cÇn t« cho miÒn kÝn 0-12
0 : t« mµu cïng mµu nÒn
1 : mµu ®Æc
2 : ®−êng ®øt nÐt
..............................
12 : kiÓu ng−êi dïng ®inh nghÜa
Sau ®ã muèn t« mµu miÒn kÝn chøa ®iÓm (x,y) ta dïng lÖnh
FloodFill(x,y,m);
víi m chÝnh lµ mµu cña ®−êng kÝn chøa ®iÓm (x,y)
VÝ dô :
Uses Crt, Graph, dos;
Const
(* Pattern : FillPatternType = ($80,$63,$63,$63,$7f,$63,$63,$63);*)
Pattern : FillPatternType = ($1a,$2b,$4c,$8d,$8d,$4c,$2b,$1a);
Var
gd,gm, i : integer;
Begin
gd:=0;
InitGraph(gd,gm,' ');
SetColor(red);
Circle(320,240,100);
Kü thuËt §å ho¹ m¸y tÝnh
118
For i:=0 To 11 Do
Begin
SetFillStyle(i,Cyan);
FloodFill(320,240,red);
Readln;
End;
SetFillPattern(Pattern,Red);
SetFillStyle(12,Red);
Circle(320,240,100);
FloodFill(320,240,red);
Readln;
CloseGraph;
End.
9. LÊy thêi gian vµ ngµy th¸ng cña hÖ thèng
§Ó lÊy ngµy vµ giê cña hÖ thèng ta ph¶i sö dông Unit DOS vµ khai b¸o c¸c biÕn :
Var
gio,phut,giay,pt,nam,thang,ngay,dw: Word;
t−¬ng øng lµ giê, phót, gi©y, phÇn tr¨m gi©y vµ n¨m, th¸ng, ngµy, thø tù cña ngµy
trong tuÇn vµ sau ®ã dïng lÖnh :
GetTime(gio,phut,giay,pt);
GetDate(nam,thang,ngay,dw);
Cßn ®Ó ®Æt thêi gian vµ ngµy th¸ng ta dïng lÖnh :
SetTime(gio,phut,giay,pt);
SetDate(nam,thang,ngay,dw);
VÝ dô :
Uses Crt, Graph, dos;
Var
gio,phut,giay,pt,nam,thang,ngay,dw:Word;
Begin
GetTime(gio,phut,giay,pt);
GetDate(nam,thang,ngay,dw);
clrscr;
Writeln(gio,':',phut,':',giay);
Writeln(ngay,'/',thang,'/',nam);
Readln;
End.
Các file đính kèm theo tài liệu này:
- Kỹ thuật Đồ hoạ máy tính.pdf