VI. Bài tập
Xem Bài 14 - Bài tập thực hành Làm việc với File và Thuật toán nâng cao
Bài 13 - ĐỒ HỌA
Nội dung bài học
I. Khởi động đồ hoạ
II. Các hàm đồ hoạ
1. Mẫu và màu
2. Vẽ và tô màu
3. Vẽ đường gấp khúc và đa giác
4. Vẽ điểm, miền
5. Hình chữ nhật
6. Cửa sổ (Viewport)
III. Xử lý văn bản trên màn hình đồ hoạ
1. Hiển thị văn bản trên màn hình đồ hoạ
2. Sử dụng các Fonts chữ
3. Bề rộng và chiều cao của kí tự
IV. Tóm tắt nội dung bài học
Việc hiển thị thông tin trên màn hình máy tính được thực hiện thông qua một vỉ mạch điều khiển màn hình. Khi màn hình ở chế độ văn bản (text mode) chúng ta có thể hiển thị thông tin lên màn hình bằng các lệnh: printf(), putch(), putchar(), … Thông tin mà chúng ta cần đưa ra màn hình được chuyển tới vỉ mạch điều khiển màn hình dưới dạng mã kí tự ASCII. Vỉ mạch nói trên có nhiệm vụ đưa kí tự đó theo mẫu định sẵn ra màn hình ở vị trí được xác định bởi chương trình của chúng ta.
Ngoài chế độ văn bản, màn hình còn có thể làm việc trong chế độ đồ hoạ. Khi màn hình ở chế độ đồ họa chúng ta có thể vẽ đồ thị, viết chữ to hoặc thể hiện các hình ảnh khác - những việc mà chúng ta không thể thực hiện được trong chế độ văn bản.
Các hàm và thủ tục đồ hoạ được khai báo trong file graphics.h.
I. Khởi động đồ hoạ
Chuyển chế độ màn hình về chế độ đồ họa cho phép thực hiện các lệnh vẻ đối tượng đồ họa.
Cú pháp: void initgraph(int *graphdriver,int graphmode,char *driverpath);
Trong đó:
+ driverpath: là xâu ký tự chỉ đường dẫn đến thư mục chứa các tập tin điều khiển đồ hoạ.
+ graphdriver: cho biết màn hình đồ hoạ sử dụng trong chương trình.
+ graphmode: cho biết mode đồ hoạ sử dụng trong chương trình.
Bảng 13-1
Các giá trị có thể của graphdriver và graphmode
Graphdriver
|
graphmode
|
Độ phân giải
|
CGA (1)
|
CGAC0 (0)
CGAC1 (1)
CGAC2 (2)
CGAC3 (3)
CGAHI (4)
|
320x200
320x200
320x200
320x200
640x200
|
MCGA (2)
|
MCGA0 (0)
MCGA1 (1)
MCGA2 (2)
MCGA3 (3)
MCGAMed (4)
MCGAHI (5)
|
320x200
320x200
320x200
320x200
640x200
640x480
|
EGA (3)
|
EGAL0 (0)
EGAHI (1)
|
640x200
640x350
|
EGA64 (4)
|
EGA64LO (0)
EGA64HI (1)
|
640x200
640x350
|
EGAMONO (5)
|
EGAMONOHi (0)
|
640x350
|
VGA (9)
|
VGALO (0)
VGAMED (1)
VGAHI (2)
|
640x200
640x350
640x480
|
HERCMONO (7)
|
HERCMONOHI
|
720x348
|
ATT400 (8)
|
ATT400C0 (0)
ATT400C1 (1)
ATT400C2 (2)
ATT400C3 (3)
ATT400MED (4)
ATT400HI (5)
|
320x200
320x200
320x200
320x200
640x400
640x400
|
PC3270 (10)
|
PC3270HI (0)
|
720x350
|
IBM8514 (6)
|
PC3270LO (0)
PC3270HI (1)
|
640x480 256 mầu
1024x768 256 mầu
|
Bảng trên cho thấy độ phân giải của màn hình phụ thuộc cả vào kiểu màn hình và mode. Ví dụ như trong màn hình EGA nếu dùng EGALO thì độ phân giải là 640x200 (Hàm getmaxx() cho giá trị cực đại của số điểm theo chiều ngang của màn hình. Hàm getmaxy() cho giá trị cực đại của số điểm theo chiều dọc của màn hình.).
Ví dụ: Khởi tạo đồ họa trong môi trường lập trình Turbo C. Giả sử máy tính có màn hình VGA, các tập tin đồ hoạ chứa trong thư mục C:\TC \BGI, khi đó ta khởi động chế độ đồ hoạ cho màn hình như sau:
#include
main()
{
int mh=VGA,mode=VGAHI; /*Hoặc mh=9,mode=2*/
initgraph(&mh,&mode,"C:\\TC\\BGI");
}
Nếu không biết chính xác kiểu màn hình đang sử dụng thì ta gán cho biến graphdriver bằng DETECT hay giá trị 0. Khi đó, kết quả của initgraph sẽ là:
Kiểu màn hình đang sử dụng được phát hiện, giá trị của nó được gán cho biến graphdriver.
Mode đồ hoạ ở độ phân giải cao nhất ứng với màn hành đang sử dụng cũng được phát hiện và giá trị của nó được gán cho biến graphmode.
Như vậy dùng hằng số DETECT chẳng những có thể khởi tạo được chế độ đồ hoạ cho màn hình hiện có theo mode có độ phân giải cao nhất mà còn giúp ta xác định kiểu màn hình đang sử dụng.
Ví dụ khởi tạo đồ họa trong môi trường DevC++.
Kiểm tra tính tồn tại của file tiêu đề thư viện graphics.h trong thư mục include, và thư viện libbgi.a lib.
Tạo một project trong cửa sổ option của project chọn tab Parameters chọn các file thư viện:
-lbgi
-lgdi32
-lcomdlg32
-luuid
-loleaut32
-lole32
Khởi tạo giống như trong Turbo C, với tham số cuối cùng là chuỗi trống.
#include
main()
{
int mh=VGA,mode=VGAHI; /*Hoặc mh=9,mode=2*/
initgraph(&mh,&mode," ");
}
Ví dụ: Chương trình dưới đây xác định kiểu màn hình đang sử dụng:
#include
#include
main()
{
int mh=0, mode;
initgraph(&mh,&mode,"C:\\TC\\BGI");
closegraph();
printf("\n Gia tri so cua man hinh la: %d",mh);
printf("\n Gia tri so mode do hoa la: %d",mode);
getch();
}
Nếu chuỗi dùng để xác định driverpath là chuỗi rỗng thì chương trình dịch sẽ tìm kiếm các file điều khiển đồ hoạ trên thư mục hiện thời và thư của của trình biên dịch.
Chú ý: Màn hình đồ họa máy tính được xác định tọa độ theo chiều từ trái sang phải và từ trên xuống dưới khác với tọa độ không gian decac.
Vì thế khi vẽ hình trên màn hình cần chuyển trục tọa độ về vị trí phù hợp, và đảo trục tọa độ theo tọa độ thực.
Chia sẻ với bạn bè của bạn: |