Sö dông th viÖn ®å häa cña C/C++
H
NG D N S
D NG TH
VI N
H A TRONG C/C++
I. M t s l u ý chung:
Yêu c u t i thi u ph i có t p tin EGAVGA.BGI (Thông th
tr
h a n m trong th m c BGI).
Không nên dùng các hàm liên quan n màn hình trong ch
printf, cout, scanf, cin, ... trong khi dùng ch
h a.
ng các t p tin h
v n b n nh
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, ta
a con tr v tên hàm trong ch ng trình sau ó nh t h p phím CTRL+F1
khi ó máy s hi n c u trúc c a hàm c n tham kh o.
Mu n tham kh o danh sách toàn b hàm c a th vi n
phím CTRL+F1 ngay t i dòng ch graphics.h
II. Các hàm kh i t o và óng ch
h a
1. void initgraph(int &gdriver,int
&gmode,String path);
Hàm này có tác d ng kh i t o ch
h a trong C/C++
Trong ó:
gmode : Không c n ph i kh i t o giá tr ban u
path
:
ng d n t i th m c ch a các t p tin h tr
gdriver: Là các giá tr t 0 n 10
H ng tr
DETECT
CGA
MCGA
EGA
EGA64
EGAMONO
IBM8514
HERCMONO
ATT400
VGA
PC3270
Giá tr
0 (Ng m
1
2
3
4
5
6
7
8
9
10
h a, ta nh n t h p
h a
nh máy t tìm ph n c ng thích h p)
2. int graphresult():
Tr v mã l i c a thao tác kh i t o
h a ( sau khi s d ng hàm initgraph)
- N u kh i t o thành công thì tr v giá tr là 0 (ho c grOk).
- N u không thành công thì tr v giá tr khác 0
3. void closegraph():
óng ch
TrÇn B¸ ¸nh
h a, tr v ch
v n b n bình th
ng.
1
Sö dông th viÖn ®å häa cña C/C++
Ví d 1: Vi t ch
màn hình.
#include
#include
#include
#include
#include
ng trình xây d ng hàm kh i t o
h a và v m t
<graphics.h> //th vi n ch a các hàm
<stdlib.h>
<iostream.h>
<stdio.h>
<conio.h>
ng tròn ra
h a
int main(void)
{
/* Kh i t o các gái tr ban u */
int gdriver = DETECT, gmode, errorcode;
h a */
/* Kh i t o ch
initgraph(&gdriver, &gmode, "c:\\bc5\\BGI");
/* L y k t qu c a thao tác kh i t o */
errorcode = graphresult();
if (errorcode != grOk) /* Thao tác kh i t o g p l i */
{
cout<<"Khong khoi tao duoc che do do hoa!!!!";
getch();
// D ng l i ch n phím b t k
exit(1);
// Thoát kh i ch ng trình
}
/*
Thao tác các l nh
h a t i v trí này */
ng tròn */
/* V m t
circle(200, 250,200); //v
ng tròn có t a
tâm là (200,250)và bán
kính r= 200
getch();
closegraph();
return 0;
//d ng l i
xem
// óng ch
h a
//Thoát kh i hàm main()
}
III. H th ng t a
M t i m nh khi hi n th trên màn hình u
- T a c a i m ó (t a
c xác
- Màu s c c a i m ó
c xác inh qua hai thu c tính:
nh c p s nguyên (x,y))
1. int getx()
int gety()
Các hàm trên tr v t a
TrÇn B¸ ¸nh
x, y c a con tr
2
Sử dụng thư viện đồ họa của C/C++
2. int getmaxx()
Tr v chi u r ng t i a c a mn hỡnh (tớnh b ng s pixel- i m nh)
3. int getmaxy()
Tr v chi u cao t i a c a mn hỡnh (tớnh b ng s pixel- i m nh)
getmaxx()
(0,0)
getmaxy()
Hỡnh 1: Mụ ph ng t a
mn hỡnh
4. void cleardevice()
Xúa ton b mn hỡnh
h a b ng mu n n v a con tr v v trớ (0,0) c a mn hỡnh
Vớ d 2: Vi t ch ng trỡnh v m t
ng trũn cú tõm (150,200) v bỏn kớnh l 100.
sau ú xúa hỡnh ny v v l i
ng trũn khỏc cú tõm l chớnh gi a mn hỡnh v cú
bỏn kớnh l n a chi u cao mn hỡnh.
#include <graphics.h> //th vi n ch a cỏc hm
h a
#include
#include
#include
#include
<iostream.h>
<stdlib.h>
<stdio.h>
<conio.h>
int main(void)
{
/* Kh i t o cỏc gỏi tr ban u */
int gdriver = DETECT, gmode, errorcode;
/* Kh i t o ch
h a */
initgraph(&gdriver, &gmode, "C:\\bc5\\BGI");
/* L y k t qu c a thao tỏc kh i t o */
errorcode = graphresult();
if (errorcode != grOk) /* Thao tỏc kh i t o g p l i */
{
cout<<"Khong khoi tao duoc che do do hoa!!!!";
getch();
// D ng l i ch n phớm b t k
exit(1);
// Thoỏt kh i ch ng trỡnh
}
Trần Bá ánh
3
Sö dông th viÖn ®å häa cña C/C++
/* V m t
ng tròn có t a
tâm là (200,250) và bán kính r= 200*/
circle(150, 200,100);
getch();
//d ng l i
xem
cleardevice(); //Xóa màn hình tr c ó
getch();
// Ch
n 1 phím b t k
/* L y t a chính gi a c a màn hình */
int maxx,maxy,x,y,r;
//L y chi u r ng l n nh t c a màn hình
maxx = getmaxx();
maxy = getmaxy();
//L y chi u cao l n nh t c a màn hình
x = maxx/2;
//L y i m chính gi a màn hình theo x
y = maxy/2;
//L y i m chính gi a màn hình theo y
r = y;
//bán kính
ng tròn
/*V
ng tròn m i có t a
chính gi a màn hình và bán r */
circle(x,y,r);
getch();
h a
// óng ch
//Thoát kh i hàm main()
closegraph();
return 0;
}
IV. V
i m,
ng, vùng:
1. void putpixel(x, y, color)
Hi n th ra màn hình m t i m nh có màu s c là color, t i t a
Trong ó:
x,y: là các s nguyên không âm
color: có giá tr t 0 n 15
B ng giá tr c a color nh sau:
Màu
giá tr
BLACK
BLUE
GREEN
CYAN
RED
MAGENTA
BROWN
LIGHTGRAY
DARKGRAY
LIGHTBLUE
LIGHTGREEN
LIGHTCYAN
TrÇn B¸ ¸nh
(x,y)
0
1
2
3
4
5
6
7
8
9
10
11
4
Sö dông th viÖn ®å häa cña C/C++
LIGHTRED
LIGHTMAGENTA
YELLOW
WHITE
12
13
14
15
Ví d : V m t i m nh có màu
ra màn hình t i t a
putpixel(20, 15, RED);
Ho c:
putpixel(20, 15, 4);
(20,15)
2. int getpixel(x,y)
Tr v màu c a i m nh t i v trí có t a
là (x,y)
ví d 3: Vi t ch ng trình v
th c a hàm s b t k
#include
#include
#include
#include
#include
#include
<dos.h>
<math.h>
<conio.h>
<stdio.h>
<stdlib.h>
<graphics.h>
//T l phóng to
#define TL 50
void main()
{
int i;
int gr_drive = 0, gr_mode; //Kh i t o ch
h a
initgraph(&gr_drive, &gr_mode, "C:\\BC5\\BGI");
setcolor(7); //V h tr c t a
line(0,getmaxy()/2,getmaxx(),getmaxy()/2);
line(getmaxx()/2,0,getmaxx()/2,getmaxy());
outtextxy(325,230,"0");
for(int i=320%TL;i<640;i+=TL)
circle(i,239,1);
for(i=240%TL;i<480;i+=TL)
circle(319,i,1);
setviewport(getmaxx()/2,getmaxy()/2,getmaxx(),getmaxy(),0);
for(float x=-255;x<255;x+=0.001) //V
{
//************************
float y=x*x*x-2*x+1; //Hàm s c n v
th Hàm s
//************************
int X=TL*x,Y=-TL*(y);
putpixel(X,Y,2);
TrÇn B¸ ¸nh
5
Sö dông th viÖn ®å häa cña C/C++
}
getch();
closegraph();
// óng ch
h a
}
3. void moveto(x, y)
Di chuy n v trí con tr t i i m có t a
(x,y)
4. void line(x1, y1, x2,y2)
V
ng th ng có t a
i m
u là (x1,y1) và t a
i m cu i là (x2,y2)
5. void rectangle(x1,y1,x2,y2)
V hình ch nh t có t a
(x2,y2)
góc trên bên trái là (x1,y1) và t a
góc d
i bên ph i là
6. void circle(x, y, r)
V
ng tròn có t a
tâm là (x,y) và bán kính là r
ví d 4:
1. V
ng th ng có t a
i m u là (30,30) và t a
i m cu i là (150,200)
2. V hình ch nh t có t a
góc trên bên trái là (30,30) và góc d i bên ph i là
(150,200)
3. V
ng tròn có t a tâm là (90,121) và có bán kính là 90
line(30,30);
rectangle(30,30,150,200);
circle(90,121,90);
7. void
drawpoly(n, poly);
V m t a giác có s
nh là n, t a
các nh ch a trong m ng poly.
Chú ý: T a c a i m u và i m cu i ph i trùng nhau
Ví d 6: V
a giác có 4
nh và t a
các
nh l n l
t là:
(1,2), (9,10),(50,30),(1,1)
int poly[8];
poly[0]= 1;
poly[1]= 2;
poly[2]= 9;
poly[3]= 10;
poly[4]= 50;
poly[5]= 30;
poly[6]= poly[0];
poly[8]= poly[1];
drawpoly(4,poly);
TrÇn B¸ ¸nh
6
Sö dông th viÖn ®å häa cña C/C++
8. void
ellipse(x, y, loaibo, Do, BtrucLonx, Btrucnhoy)
V
ng elip t a
tâm là (x,y), có bán tr c l n là BtrucLonx, bán tr c nh là
Btrucnhoy. Vi c v Elíp ph thu c vào giá tr c a bi n Do.
- N u Do = 90 thì ch v cung ph n t th I c a Elip
- N u Do = 180 thì ch v cung ph n t th I và II c a Elíp
- N u Do = 360 thì v toàn b Elíp
Bi n loaibo có ch c n ng ng c l i hòan toàn v i bi n Do (xóa)
t c là:
- N u loaibo = 0 cho hi n th h t ph n v Elíp (không xóa)
c hi n th (xóa i
- N u loaibo = 90 thì cung ph n t th I c a Elip không
cung ph n t th I)
c hi n th .
- N u loaibo = 180 thì cung ph n t th I và II không
Chú ý: N u giá tr c a BtrucLonx = Btrucnhoy thì tr thành v
ng tròn có bán
kính là BtrucLonx
Ví d 7: V hình Elip có t a
tâm là (150,140), bán tr c l n là 100, bán tr c nh là
60
ellipse(150, 140, 0, 360, 100, 60);
9. void setcolor(color)
t màu v cho vi c v các
ng, hình, ...
color là màu c n
t
10. int
getcolor()
Tr v màu v hi n hành
11.void setbkcolor(color)
t màu n n cho màn hình
h a, color là màu c n
t
12. int getbkcolor()
Tr v màu n n c a màn hình
h a
Ví d 8: Vi t ch ng trình th c hi n các công vi c sau:
- t n n màn hình là màu xanh da tr i
-V
ng tròn có tâm là (200,220) bán kính 90 và có màu là màu tr ng
- V hình ch nh t có t a
góc trên bên trái là (10,20) và t a
c a góc d i bên
ph i là (100, 110) và có màu là màu vàng
V hình Elip có t a
tâm là (150,140), bán tr c l n là 100, bán tr c nh là 60 và có
màu là màu
#include
#include
#include
#include
#include
<graphics.h> //th vi n ch a các hàm
<stdlib.h>
<stdio.h>
<conio.h>
<iostream.h>
TrÇn B¸ ¸nh
h a
7
Sö dông th viÖn ®å häa cña C/C++
int main(void)
{
/* Kh i t o các gái tr ban u */
int gdriver = DETECT, gmode, errorcode;
h a */
/* Kh i t o ch
initgraph(&gdriver, &gmode, "BGI");
errorcode = graphresult();
if (errorcode != grOk) /* Thao tác kh i t o g p l i */
{
cout"Khong khoi tao duoc che do do hoa!!!!";
getch();
// D ng l i ch n phím b t k
exit(1);
// Thoát kh i ch ng trình
}
/*
t màu n n là màu xanh da tr i*/
setbkcolor(BLUE);
/*
t màu v cho
ng tròn là màu tr ng */
setcolor(WHITE);
/* V
ng tròn */
circle(100, 120,90);
/*
t màu v cho hình ch nh t là màu tr ng */
setcolor(YELLOW);
/* V hình ch nh t */
rectangle(10,20,100,110);
/*
t màu v cho hình elip là màu
*/
setcolor(RED);
/* V hình Elip*/
ellipse(150, 140, 0, 360, 100, 60);
getch();
// Ch
closegraph();
return 0;
n 1 phím b t k
// óng ch
h a
//Thoát kh i hàm main()
}
TrÇn B¸ ¸nh
8
Sö dông th viÖn ®å häa cña C/C++
V. Tô màu vùng
1.void
setfillstyle(parten, color);
Thi t l p m u parten tô và m u tô color
trong ó parten có các giá tr sau:
EMPTY_FILL
SOLID_FILL
LINE_FILL
LTSLASH_FILL
SLASH_FILL
BKSLASH_FILL
LTBKSLASH_FILL
HATCH_FILL
XHATCH_FILL
INTERLEAVE_FILL
WIDE_DOT_FILL
CLOSE_DOT_FILL
USER_FILL
0
1
2
3
4
5
6
7
8
9
10
11
12
2. floodfill(x,y, color);
Tô m t vùng khép kín v i màu s c và m u tô ã
c thi t l p b i l nh floodfill
c a m t i m n m trong vùng c n tô.
Trong ó: x,y là t a
color là màu c a
ng biên vùng c n tô
ng tròn tâm có t a
là (250,200), bán kính là 100
Ví d 9: Vi t ch ng trình v
có màu là tr ng. Tô hình tròn ó v i màu .
#include <graphics.h> //th vi n ch a các hàm
h a
#include
#include
#include
#include
<stdlib.h>
<stdio.h>
<conio.h>
<iostream.h>
int main(void)
{
/* Kh i t o các gái tr ban u */
int gdriver = DETECT, gmode, errorcode;
h a */
/* Kh i t o ch
initgraph(&gdriver, &gmode, "BGI");
errorcode = graphresult();
if (errorcode != grOk) /* Thao tác kh i t o g p l i */
{
cout<<"Khong khoi tao duoc che do do hoa!!!!";
getch();
// D ng l i ch n phím b t k
TrÇn B¸ ¸nh
9
Sö dông th viÖn ®å häa cña C/C++
// Thoát kh i ch
exit(1);
ng trình
}
/* Thi t l p màu v cho
ng tròn */
setcolor(WHITE);
circle(250,200,100);
getch();
//Thi t l p màu tô và m u tô
setfillstyle(1, RED);
//Tô hình tròn
floodfill(250,200,WHITE);
getch();
closegraph();
return 0;
// óng ch
h a
//Thoát kh i hàm main()
}
VI. Các hàm v ch
1. void outtextxy(x, y, St);
Hi n th chu i ký t St ra màn hình t i v trí có t a
2.
(x,y)
void far settextstyle(font, direction, size)
Thi t l p Font (font), h ng (direction)và
l n (size) c a ch cho cho vi c hi n th chu i
kí t c a hàm outtextxy.
Trong ó:
font
: 0,1,2,3,4
direction : 0 Hi n th ch ngang
1 Hi n th ch d c
size
:
l n c a ch
0
1
Ch
d c
Ch ngang
3. void settextjustify(horiz, vert);
Thi t l p ch
outtextxy.
TrÇn B¸ ¸nh
canh ch nh l cho vi c hi n th chu i ký t
c a hàm outtext,
10
Sö dông th viÖn ®å häa cña C/C++
horiz
LEFT_TEXT
CENTER_TEXT
RIGHT_TEXT
0
1
2
Canh l
canh l
Canh l
vert
BOTTOM_TEXT
CENTER_TEXT
TOP_TEXT
0
1
2
Canh l
Canh l
Canh l
t trái sang ph i
gi a
ph i
phía d i c a dòng
gi a dòng
phía trên c a dòng
horiz
0
vert
Canh l t trái
1
Canh l
phía d
i c a dòng
Canh l
gi a dòng
canh l gi a
2
Canh l ph i Canh l
phía trên dòng
Ví d 10: Vi t ch ng trình hi n th ra màn hình dòng ch
" Xin chao cac ban " theo chi u d c
và dòng ch "Chuc moi dieu tot dep" theo chi u ngang
t i i m có t a (150,100)
#include
#include
#include
#include
#include
<graphics.h>
<stdlib.h>
<iostream.h>
<stdio.h>
<conio.h>
int main(void)
{
int gdriver = DETECT, gmode, errorcode;
char stdoc[40]=" Xin chao cac ban ";
char stngang[40] = " Chuc moi dieu tot dep ";
initgraph(&gdriver, &gmode, "c:\\bc5\\BGI");
errorcode = graphresult();
if (errorcode != grOk)
{
cout<< khong khoi tao duoc do hoa!!!";
TrÇn B¸ ¸nh
11
Sö dông th viÖn ®å häa cña C/C++
getch();
exit(1);
}
//
Thi t l p hi n th theo chi u d c
settextstyle(1,1,5);
//
a ch ra màn hình
outtextxy(150, 100, stdoc);
getch();
// Thi t l p hi n th theo chi u ngang
settextstyle(1,0,5);
//
a ch ra màn hình
outtextxy(150, 100, stngang);
getch();
closegraph();
return 0;
}
VII. T o ho t hình
Ý t ng: V
i t ng ra màn hinh, d ng l i m t lúc xem sau xóa i t ng
v a v , v l i i t ng t a khác. Quá trình trên di n ra xen k v i nhau t o
ra c m giác i t ng ang chuy n ng.
Cách th c hi n
B1. t màu cho i t ng c n v
B2. V
i t ng ra màn hình
B3. Ch vài giây
B4. Xóa i v a v b ng cách v l i i t ng ó v i màu là màu n n
B5. Thay i t a c a i t ng r i l p l i t B1
Ví d 11: V
#include
#include
#include
#include
ng tròn chuy n
ng qua l i trên màn màn hình
<conio.h>
<graphics.h>
<math.h>
<dos.h>
#define RADIUS 21
void banhxe()
{
double xc = 100, yc;
TrÇn B¸ ¸nh
12
Sö dông th viÖn ®å häa cña C/C++
yc = 448 - RADIUS;
int i=1;
while (!kbhit())
{
setcolor(YELLOW); // t màu v cho
circle(xc, yc, RADIUS);
ng
//Ch 10 mns
delay(10);
/* Xóa
it
i t ng v a v */
setcolor(BLACK);
// t màu v cho i t ng là màu n n
circle(xc, yc, RADIUS); //V l i i t ng b ng màu n n
xc = xc + i; //Thay i t a c a i t ng
if ((xc+RADIUS >=getmaxx())|| (xc-RADIUS <=0))
// i chi u chuy n ng c a bánh xe
i = -i;
}
}
void main()
{
int gr_drive = DETECT, gr_mode;
initgraph(&gr_drive, &gr_mode, "C:\\bc5\\bgi");
line(0, 450, getmaxx(), 450);
line(0, 451, getmaxx(), 451);
banhxe();
getch();
closegraph();
}
Ví d 12: Vi t ch
hình
ng trình minh h a bánh xe l a chuy n
ng qua l i trên màn
/* Ve banh xe lua */
#include <conio.h>
#include <graphics.h>
#include <math.h>
#include <dos.h>
/* 1 / sqrt(2) */
#define FCT 0.7071067
/* H s
it
sang radian */
#define RADS 0.017453293
TrÇn B¸ ¸nh
13
Sö dông th viÖn ®å häa cña C/C++
#define RADIUS 21
//Bán kính bánh xe
void banhxelua()
{
double angle = 45, xc = 100, yc, xl, yl;
yc = 448 - RADIUS;
int i = 2;
while (!kbhit())
{
setcolor(YELLOW); // t màu v cho bánh xe
xl = RADIUS * cos(angle * RADS);
yl = RADIUS * sin(angle * RADS);
circle(xc, yc, RADIUS);
circle(xc + 100, yc, RADIUS);
setcolor(RED);
// t màu v cho tr c khu a
line(xc + xl, yc + yl, xc + xl + 100, yc + yl);
line(xc - xl, yc - yl, xc - xl + 100, yc - yl);
//Ch 10mns
delay(10);
/* Xóa các
i t ng v a v */
// t màu n n v các i t ng
setcolor(BLACK);
circle(xc, yc, RADIUS);
circle(xc + 100, yc, RADIUS);
line(xc + xl, yc + yl, xc + xl + 100, yc + yl);
line(xc - xl, yc - yl, xc - xl + 100, yc - yl);
angle += 1;
xc += i * M_PI * RADIUS / 360; //Thay i t a c a các i t
if ((xc+100+RADIUS >=getmaxx()) ||(xc-RADIUS <=0))
i = -i;
// i h ng chuy n ng c a bánh xe
}
}
ng
void main()
{
int gr_drive = DETECT, gr_mode;
initgraph(&gr_drive, &gr_mode, "C:\\BC5\\BGI");
line(0, 450, getmaxx(), 450);
line(0, 451, getmaxx(), 451);
banhxelua();
getch();
closegraph();
}
TrÇn B¸ ¸nh
14