60
Chơng 6 : đồ hoạ trong c
Đ
1. Khái niệm chung
Turbo C có khoảng 100 hàm đồ hoạ . Các hàm này đợc chia làm hai kiểu :
Loại theo kiểu văn bản ( ví dụ hàm tạo cửa sổ )
Loại theo kiểu đồ hoạ
Đ
2. Hàm theo kiểu văn bản
Các hàm này đợc dùng với màn hình đơn sắc hay màn hình đồ hoạ . Ta phải đặt vào
đầu chơng trình dòng #include <conio.h> .
1. Cửa sổ : Mục đích của các hàm đồ hoạ theo kiểu văn bản là tạo ra các cửa sổ . Cửa sổ là
vubgf hình chữ nhật trên màn hình dùng để giới hạn vùng xuất dữ liệu . Nếu ta soạn thảo
văn bản trong cửa sổ thì con nháy chỉ di chuyển trong phạm vi của cửa sổ chứ không phải
toàn bộ màn hình . Ta xét một chơng trình tạo ra cửa sổ và điền đầy vào đó dòng Xin
chao
Chơng trình 6-1 :
#include <conio.h>
#include <dos.h>
#define left 10
#define top 8
#define right 52
#define bot 21
void main()
{
int i;
4 RED
5 MAGENTA
6 BROWN
7 LIGHTGRAY
8 DARKGRAY
9 LIGHTBLUE
10 LIGHTGREEN
11 LIGHTCYAN
12 LIGHTRED
13 LIGHTMAGENTA
14 YELLOW
15 WHITE
2. Dời chỗ văn bản : Muốn dời chỗ một vùng hình chữ nhật của văn bản từ nơi này sang nơi
khác ta dùng hàm movetext() . Ta xét chơng trình sau tạo ra một cửa sổ , điền đầy cửa sổ
bằng một đoạn văn bản và dời cửa sổ sang vị trí khác trên màn hình
Chơng trình 6-2 :
#include <conio.h>
#include <dos.h>
#define left 26
#define top 7
#define right 65
#define bot 20
#define desleft 1
#define destop 1
#define numcolor 16
void main()
{
int i;
int i,x,y;
clrscr();
for (i=0;i<300;i++)
cputs(" Turbo C ");
getche();
gettext(left,top,right,bot,buf);
clrscr();
getch();
puttext(left,top,right,bot,buf);
getch();
}
Chơng trình lu toàn bộ màn hình vào vùng đệm có tên là buf nhớ hàm
gettext(x1,y1,x2,y2,buf) lu vn trong hình chữ nhật x1,y1,x2,y2 vào biến buf . Hàm
puttext(x1,y1,x2,y2,buf) đặt lại văn bản trong hình chữ nhật x1,y1,x2,y2 lu bởi biến buf ra
màn hình .
3. Một số hàm đồ hoạ văn bản khác :
void clreol(void) : xoá đến cuối dòng
int cprintf(const char *format) đa kí tự ra một cửa sổ
void textattr(int newattr) ấn định màu cùng lúc cho văn bản và nền
void gettextinfo(struct text_info *r) : đọc các thông tin nh kiểu màn hình , vị trí và kích
thớc cửa sổ , màu nền và văn bản ,vị trí con nháy
void normvideo(void) trả lại độ sáng cũ
void insline(void) : chèn thêm một dòng
void delline(void) xoá một dòng
void hightvideo(void) tăng độ sáng
void lowvideo(void) : giảm độ sáng
void textmode(int newmode) chuyển đổi giữa các kiểu văn bản . Hàm dùng các đối số sau
:
int gd,gm;
gd=DETECT;
initgraph(&gd,&gm,"c:\\bc\\bgi");
line(0,0,100,100);
circle(100,100,50);
getche();
closegraph();
}
2. Lỗi đồ hoạ : Để biết lỗi đồ hoạ ta dùng hàm int far graphresult(void) . Sau khi biết mã lỗi
ta chuyển nó sang cho hàm grapherrormsg() . Hàm này trả về con trỏ chỉ đén lỗi . Sau đây là
chơng trình minh hoạ
Chơng trình 6-5 :
#include <graphics.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
void main()
{
int gd,gm,ge;
char *ep;
gd=DETECT;
initgraph(&gd,&gm,"c:\\bc\\bgi");
ge=graphresult();
64
if (ge)
{
printf("Ma loi %d",ge);
ep=grapherrormsg(ge);
#include <stdio.h>
#include <stdlib.h>
void main()
{
int gd,gm,ge;
int x1=0,y1=0;
int x2=199,y2=199;
int xc=100,yc=100;
int r=90;
char *ep;
gd=DETECT;
initgraph(&gd,&gm,"c:\\bc\\bgi");
ge=graphresult();
if (ge)
65
{
printf("Ma loi %d",ge);
ep=grapherrormsg(ge);
puts(ep);
getch();
exit(1);
}
setlinestyle(1,1,1);
setcolor(LIGHTGREEN);
line(x1,y1,x2,y2);
circle(xc,yc,r);
getche();
closegraph();
setcolor(RED);
for (yr=0;yr<100;yr+=10)
ellipse(x,y,g1,g2,xr,yr);
getche();
closegraph();
}
Để vẽ đa giác ta dùng hàm
66
void far drawpoly(int number , int far *addrlist)
number - số đỉnh đa giác cộng thêm 1
addrlist - mảng chứa toạ độ các đỉnh , toạ độ điểm đầu và cuối phải trùng nhau
Chơng trình 6-8 : Vẽ một hình hộp chữ nhật
#include <graphics.h>
#include <conio.h>
#define left 50
#define top 50
#define right 150
#define bot 180
int a[]={150,50,180,20,180,135,150,180};
int b[]={50,47,150,47,180,17,95,17,50,47};
void main()
{
int gd,gm;
gd=DETECT;
clrscr();
initgraph(&gd,&gm,"c:\\bc\\bgi");
setcolor(RED);
rectangle(left,top,right,bot);