Tải bản đầy đủ (.pdf) (8 trang)

Kỹ thuật đồ họa máy tính

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (255.54 KB, 8 trang )

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 Cha 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
cha 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^);

×