Ở 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ênmá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 
              
                                            
                                
            
 
            
                 8 trang
8 trang | 
Chia sẻ: luyenbuizn | Lượt xem: 1669 | Lượt tải: 0 
              
            Nội dung tài liệu Kỹ thuật Đồ hoạ máy tính - Chế độ Graphics, để 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:
 oamaytinhchedographics.pdf oamaytinhchedographics.pdf