Kỹ thuật Đồ hoạ máy tính

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 :

pdf8 trang | Chia sẻ: tlsuongmuoi | Lượt xem: 2159 | Lượt tải: 0download
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:

  • pdfKỹ thuật Đồ hoạ máy tính.pdf
Tài liệu liên quan