Giáo trình Đồ họa máy tính - Hướng dẫn sử dụng thư viện đồ họa trong BC

PHỤ LỤC  
HƯẢNG DẢN SẢ DẢNG THƯ VIẢN ĐẢ HẢA  
TRONG BC  
1. MỘT SỐ LƯU Ý CHUNG  
•
Yêu cầu tối thiểu phải có tập tin điều khiển màn hình  
EGAVGA.BGI (Thông thường các tệp này thường nằm trong thư  
mục \BC\BGI khi được cài đặt).  
•
Để dùng được thư viện các hàm đồ họa cần có dòng lệnh :  
#include <graphics.h> và đặt mục chọn Graphics library là ON  
([x]) trong menu Options/Linker/Libraries.  
•
•
•
Đặt Model là Large trong mục chọn Options/Linker/Code  
generation…  
Không nên dùng các hàm liên quan đến màn hình trong chế độ  
văn bản như printf, scanf, … trong khi dùng chế độ đồ họa.  
Khi cần tham khảo cú pháp, cách sử dụng của bất kì một hàm đồ  
họa nào, đưa con trỏ về tên hàm trong chương trình sau đó nhấn tổ  
hợp phím CTRL+F1. Muốn tham khảo danh sách toàn bộ các hàm  
của thư viện đồ họa nhấn tổ hợp phím CTRL+F1 ngay tại dòng  
chữ graphics.h  
KHỞI TẠO VÀ ĐÓNG CHẾ ĐỘ ĐỒ HỌA  
Nhóm các hàm và ý nghĩa sử dụng  
Tên hàm  
Ý nghĩa  
initgraph  
closegraph  
Khởi tạo và đóng chế độ đồ họa. Thông thường  
việc khởi tạo đồ họa được viết dưới dạng một  
hàm.  
Đặt các thiết lập đồ họa về giá trị mặc định bao  
gồm vị trí con trỏ, bảng màu (palette color), màu nền,  
màu vẽ, mẫu tô (fill pattern), kiểu tô (fill style), …  
Trả về mã lỗi của thao tác đồ họa sau cùng không  
thực hiện được.  
Trả về con trỏ tới chuỗi thông báo tương ứng với  
một mã lỗi cho trước. (Dùng hàm này sau khi có  
được mã lỗi để biết được tại sao thao tác đồ họa  
thực hiện không thành công)  
Xác định các trình điều khiển thiết bị và chế độ đồ  
họa để dùng.  
graphdefaults  
graphresult  
grapherrormsg  
detectgraph  
getgraphmode, getdrivername, getmodename,  
getmaxmode, getmoderange, setgraphmode,  
restorecrtmode, registerbgidriver, registerbgifont,  
installuserdriver, setgraphbufsize….  
Tham khảo  
Xây dựng hàm khởi tạo chế độ đồ họa  
#include <graphics.h>  
#include <conio.h>  
#include <stdio.h>  
#include <stdlib.h>  
void InitGraph(void)  
{
int gdriver = DETECT, gmode, errorcode;  
/* Goi ham khoi tao che do do hoa voi duong dan den tap tin .BGI la  
thu muc hien hanh */  
initgraph(&gdriver, &gmode, "");  
/* Lay ket qua cua thao tac khoi tao */  
errorcode = graphresult();  
if (errorcode != grOk) // Thao tac khoi tao gap loi  
{
// In thong bao loi ra man hinh  
printf("Graphics error: %s\n", grapherrormsg(errorcode));  
printf("Press any key to halt:");  
getch();  
exit(1); //Ngung han chuong trinh  
}
}
Cấu trúc một chương trình đồ họa thông thường  
void main (void)  
{
…
InitGraph(); // Khoi tao che do do hoa  
// Cac thao tac do hoa tiep theo sau day  
…
closegraph(); // Ngung lam viec tren che do do hoa  
…
}
Chương trình minh họa  
Mô tả CT : Phát sinh ngẫu nhiên các đường thẳng với màu tùy ý trên màn hình. Chương  
trình kết thúc khi người dùng nhấn phím bất kì.  
// Khai bao cac tap tin INCLUDE  
#include <graphics.h>  
#include <conio.h>  
#include <stdio.h>  
#include <stdlib.h>  
#include <time.h>  
// Khai bao cac bien toan cuc  
int MaxX, MaxY; // Chieu rong va chieu cao toi da cua man hinh  
int MaxColors; // So mau toi da  
// Khai bao cac ham dung trong chuong trinh  
// Ham khoi tao che do do hoa  
void InitGraph(void)  
{
int gdriver = DETECT, gmode, errorcode;  
/* Goi ham khoi tao che do do hoa voi duong dan den tap tin .BGI la thu  
muc hien hanh */  
initgraph(&gdriver, &gmode, "");  
/* Lay ket qua cua thao tac khoi tao */  
errorcode = graphresult();  
if (errorcode != grOk) // Thao tac khoi tao gap loi  
{
printf("Graphics error: %s\n", grapherrormsg(errorcode));  
printf("Press any key to halt:");  
getch();  
exit(1); //Ngung han chuong trinh  
}
// Lay cac thong tin ve chieu rong va chieu cao toi da cua che do do hoa  
dang dung  
MaxX = getmaxx();  
MaxY = getmaxy();  
// Lay thong tin ve so mau toi da  
MaxColors = getmaxcolor() + 1;  
}
// Ham phat sinh ngau nhien cac duong thang voi mau tuy y  
void LineDemo(void)  
{
int x1, y1, x2, y2; // Toa do diem dau va diem cuoi  
int color; // Mau ve duong thang  
cleardevice(); // xoa man hinh  
do  
{
// Phat sinh ngau nhien toa do duong thang  
x1 = random(MaxX);  
y1 = random(MaxY);  
x2 = random(MaxX);  
y2 = random(MaxY);  
// Phat sinh ngau nhien mau ve duong thang  
color = random(MaxColors);  
// Goi ham dat mau ve duong thang  
setcolor(color);  
// Goi ham do hoa thuc hien viec ve duong thang  
line(x1, y1, x2, y2);  
} while (!kbhit()); // Vong lap ket thuc khi nguoi dung nhan phim bat ki  
}
// Ham chinh cua chuong trinh  
void main (void)  
{
randomize(); // Khoi tao bo phat sinh so ngau nhien  
InitGraph(); // Khoi tao che do do hoa  
// Cac thao do hoa  
LineDemo();  
getch();  
closegraph(); // Ngung lam viec tren che do do hoa  
}
HỆ THỐNG TỌA ĐỘ  
Nhóm các hàm và ý nghĩa sử dụng  
Tên hàm  
Ý nghĩa  
getmaxx  
getmaxy  
Trả về chiều rộng (theo x) và chiều cao (theo y)  
tối đa của chế độ màn hình đang dùng.  
Trả về tọa độ hiện hành của con trỏ.  
getx  
gety  
getviewsettings  
Lấy thông tin về viewport hiện hành. Thông tin  
này được lưu trong kiểu struct viewporttype {int left,  
top, right, bottom, clip}  
cleardevice  
clearviewport  
setviewport  
Xóa toàn bộ màn hình đồ họa bằng màu nền và  
đưa con trỏ về vị trí (0, 0) của màn hình.  
Xóa toàn bộ viewport và đưa con trỏ về vị trí  
(0,0) của viewport.  
Thiết lập viewport cho các thao tác đồ họa (viết,  
vẽ, tô, ...).  
VẼ ĐIỂM, ĐƯỜNG, VÙNG  
Nhóm các hàm và ý nghĩa sử dụng  
Tên hàm  
Ý nghĩa  
putpixel  
Vẽ ra màn hình một pixel tại một vị trí xác định.  
Trả về màu của một pixel tại một vị trí cho trước.  
Di chuyển vị trí con trỏ hiện hành.  
getpixel  
moveto  
Tên hàm  
Ý nghĩa  
line  
Vẽ một đoạn thẳng.  
Vẽ đường tròn, ellipse.  
circle  
ellipse  
rectangle  
drawpoly  
getlinesettings  
setlinestyle  
Vẽ hình chữ nhật, đa giác.  
Trả về/thiết lập kiểu (style), mẫu tô (pattern), bề  
rộng (thickness) được dùng cho việc vẽ các đường  
nói chung (đường thẳng, đa giác, hình chữ  
nhật...). Với hàm getlinesettings, các thông tin này  
được trả về trong một biến có cấu trúc là struct  
linesettingstype.  
Trả về / đặt màu vẽ hiện hành. Màu vẽ này dùng  
cho việc vẽ các điểm (pixel), đường, ...  
Đặt cách vẽ các đường mới là COPY_PUT hay  
getcolor  
setcolor  
setwritemode  
XOR_PUT. Hàm này thường chỉ làm việc với line,  
lineto, linerel, rectangle, drawpoly.  
Tham khảo  
moverel, lineto, linerel, arc, sector, pieslice, setaspectratio,  
getaspectratio, getmaxcolor, getbkcolor, setbkcolor,  
getpalette, setallpalette, getdefaultpalette, setrgbpalette,  
getpalettesize  
Một số điểm cần lưu ý  
•
•
Các lệnh setfillstyle chỉ ảnh hưởng đến các đường trong các hàm  
line, linerel, lineto, rectangle, drawpoly, ...  
Nếu dùng chế độ vẽ là XOR_PUT, thì việc vẽ hai lần liên tiếp sẽ  
cho kết quả là vẽ và xóa đối tượng đó.  
Chương trình minh họa  
// Ham minh hoa cac kieu duong thang (linestyle)  
void LineStyleDemo(void)  
{
int x1 = 50, y1 = 50, y2 = MaxY-y1, Step = 30;  
struct linesettingstype LineInfo;  
cleardevice();  
// Luu thong tin ve duong cu  
getlinesettings(&LineInfo);  
setcolor(GREEN);  
// Ve duong voi dinh dang mac dinh, do rong la 1 pixel  
for (int style=SOLID_LINE; style<=USERBIT_LINE; style++)  
{
setlinestyle(style, 1, NORM_WIDTH);  
line(x1, y1, x1, y2);  
x1 += Step;  
}
setcolor(YELLOW);  
// Dinh dang duong voi kieu duong ngau nhien, do rong la 3  
for (style=SOLID_LINE; style<=USERBIT_LINE; style++)  
{
// Chon kieu duong can ve  
setlinestyle(style, 1, THICK_WIDTH);  
x1 += Step;  
line(x1, y1, x1, y2);  
}
// Tra lai thong tin ve duong  
setlinestyle(LineInfo.linestyle,LineInfo.pattern, LineInfo.thickness);  
getch();  
}
TÔ MÀU VÙNG  
Nhóm các hàm và ý nghĩa sử dụng  
Tên hàm  
Ý nghĩa  
fillellipse  
Vẽ và tô màu ellipse.  
Vẽ và tô màu một đa giác.  
Tô màu một vùng được bao quanh với một biên  
cho trước.  
Tô màu một vùng hình chữ nhật  
Trả về / thiết lập mẫu tô (pattern) và màu tô  
dùng cho việc tô màu các đối tượng. Đối với  
hàm getfillsettings, thông tin về mẫu tô và màu tô  
fillpoly  
floodfill  
bar  
getfillsettings  
setfillstyle  
được trả về trong một biến có cấu trúc struct  
fillsettingstype  
getfillpattern  
setfillpattern  
Các hàm này được dùng với mẫu tô do người  
dùng định nghĩa. Hàm setfillpattern được dùng để  
định nghĩa một mẫu tô từ người dùng, hàm  
getfillpattern được dùng để trả về mẫu tô của  
người dùng đã được định nghĩa từ hàm  
Tên hàm  
Ý nghĩa  
setfillpattern.  
bar3D, pieslice  
Tham khao  
Một số điểm cần lưu ý  
•
Trừ hàm bar, các hàm như fillellipse, fillpoly đều vẽ đường biên  
của đối tượng trước (thông tin về định dạng dùng từ các hàm vẽ  
đường) sau đó khi tô phần ruột bên trong mới sử dụng các thông  
tin về màu tô và mẫu tô.  
•
Tuy nhiên với hàm bar3D, hàm này sẽ vẽ đường biên khối hộp ba  
chiều trước, sau đó mới tô phần ruột bên trong.  
Chương trình minh họa  
// Ham minh hoa cac kieu mau to (fill pattern)  
void FillAreaDemo(void)  
{
int x = MaxX/2, y = MaxY/2;  
int R=MaxY/2;  
struct fillsettingstype FillInfo;  
// Luu thong tin ve cach to mau lai  
getfillsettings(&FillInfo);  
clearviewport();  
for(int pattern=SOLID_FILL; pattern<USER_FILL;pattern++)  
{
// Chon kieu mau to  
setfillstyle(pattern, pattern);  
// Ve moi cung mot mau va mot mau to khac nhau  
pieslice(x, y, (pattern-1)*36, pattern*36, R);  
}
// Tra lai thong tin to mau nhu cu  
setfillstyle(FillInfo.pattern, FillInfo.color);  
getch();  
}
CÁC HÀM VẼ CHỮ  
Nhóm các hàm và ý nghĩa sử dụng  
Tên hàm  
Ý nghĩa  
outtext  
outtextxy  
Hiển thị một chuỗi kí tự tại một vị trí xác  
định trên màn hình.  
Thiết lập font chữ, hướng của chữ, và kích  
thước chữ dùng cho việc hiển thị chuỗi kí tự  
của hàm outtext, outtextxy.  
settextstyle  
settextjustify  
Thiết lập chế độ canh chỉnh (text justification)  
cho việc hiển thị chuỗi kí tự của hàm outtext,  
outtextxy.  
gettextsettings  
Trả về các thông tin về các tính chất của việc  
hiển thị chuỗi kí tự ra màn hình. Các thông  
tin bao gồm font chữ , hướng chữ, kích thước  
chữ, việc canh chỉnh, ... Thông tin này được  
trả về trong một biến có cấu trúc struct  
textsettingstype.  
setusercharsize  
Định kích thước của kí tự.  
Trả về kích thước theo chiều ngang (width) và  
chiều cao (height) tính bằng pixel của một chuỗi  
textwidth  
textheight  
cho trước.  
sprintf, installuserfont, ...  
Tham khao  
Một số điểm cần lưu ý  
Người ta thường dùng hàm sprintf trong khi chuẩn bị một chuỗi  
•
cho hàm outtextxy. Ví dụ : để in chuỗi “Chuc mung sinh nhat lan  
thu <n> cua ban <Ten>” với n là một số nguyên và Ten là một  
chuỗi, ta dùng kết hợp hai lệnh sau :  
sprintf(szMsg, “Chuc mung sinh nhat lan thu %d cua ban %s”, n, Ten);  
outtextxy(100, 100, szMsg).  
Chương trình minh họa  
// Ham minh hoa cac ham ve chu  
void TextDemo(void)  
{
// horizontal text justification settings  
char *szHJust[] = { "LEFT_TEXT",  
"CENTER_TEXT",  
"RIGHT_TEXT"  
};  
// vertical text justification settings  
char *szVJust[] = { "BOTTOM_TEXT",  
"CENTER_TEXT",  
"TOP_TEXT"  
};  
int x = MaxX/2, y = MaxY/2;  
char Msg[80];  
settextstyle(DEFAULT_FONT, HORIZ_DIR, 1);  
for (int hj=LEFT_TEXT; hj<=RIGHT_TEXT; hj++)  
for (int vj=BOTTOM_TEXT; vj<=TOP_TEXT; vj++)  
{
cleardevice();  
// Thiet lap su canh chinh  
settextjustify(hj, vj);  
// In chuoi thong bao ung voi che do canh chinh  
sprintf(msg, "%s %s", szHJust[hj], szVJust[vj]);  
// Ve duong chu thap de thay duoc tac dung su canh chinh  
line(x-100, y, x+100, y);  
line(x, y-100, x, y+100);  
// Ve chu ra  
outtextxy(x, y, msg);  
getch();  
}
}
CÁC HÀM VỀ ẢNH BITMAP  
Nhóm các hàm và ý nghĩa sử dụng  
Tên hàm  
Ý nghĩa  
getimage  
Lưu một vùng ảnh trên màn hình vào bộ nhớ.  
Đưa một ảnh trong bộ nhớ được lưu từ hàm getimage  
ra màn hình.  
Trả về kích thước (tính bằng bytes) dùng để lưu trữ  
một vùng ảnh trên màn hình. Hàm này dùng kèm  
putimage  
imagesize  
với hàm getimage .  
setwritemode  
Tham khao  
Một số điểm cần lưu ý  
•
Hàm getimage chỉ lưu được các ảnh có kích thước không lớn hơn  
64Kb  
•
Hàm putimage lúc hiển thị một ảnh đã được lưu trong bộ nhớ khi  
gọi hàm getimage ra màn hình chỉ cần 2 tham số là tọa độ góc  
trên bên trái (left, top) thay vì phải cần 4 tham số như lúc lưu một  
vùng ảnh trong hàm getimage .  
TÀI LIẢU THAM KHẢO  
1. Francis S. Hill. Computer Graphics. Macmillan Publishing Company,  
NewYork, 1990, 754 tr.  
2. James D.Foley, Andries Van Dam, Feiner, John Hughes. Introduction to  
Computer Graphics. Addision Wesley, NewYork, 1995, 559 tr.  
3. James D.Foley, Andries Van Dam, Feiner, John Hughes. Computer  
Graphics - Principle and Practice. Addision Wesley, NewYork, 1996, 1175  
tr.  
4. Dương Anh Đức, Lê Đình Duy. Giáo trình Đồ họa máy tính. Khoa Công  
nghệ thông tin, Trường Đại học Khoa học Tự nhiên (lưu hành nội bộ),  
1996, 237 tr.  
5. Hoàng Kiếm, Dương Anh Đức, Lê Đình Duy, Vũ Hải Quân. Giáo trình Cơ  
sở Đồ họa Máy Tính, NXB Giáo dục, 2000.  
6. Donald Hearn, M.Pauline Baker. Computer Graphics, C version. Prentice  
Hall International Inc, Upper Saddle River, New Jersey, 1997, 652tr.  
doc 13 trang Thùy Anh 18340 Free
Bạn đang xem tài liệu "Giáo trình Đồ họa máy tính - Hướng dẫn sử dụng thư viện đồ họa trong BC", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • docgiao_trinh_do_hoa_may_tinh_huong_dan_su_dung_thu_vien_do_hoa.doc
  • docgraphics_distant_phuluc.doc
  • htmPhuluc.htm