Thứ Tư, 27 Tháng Mười Một 2024
Trang chủLập trìnhLập trình C/C++Hàm đồ hoạ cơ bản trong thư viện Graphics.h ngôn ngữ lập...

Hàm đồ hoạ cơ bản trong thư viện Graphics.h ngôn ngữ lập trình C/C++

DANH SÁCH BÀI VIẾT
Cài đặt thư viện Graphics trên IDE Dev C++
Hàm đồ hoạ cơ bản trong thư viện Graphics.h
Click chuột trong màn hình đồ họa
Một số chương trình xây dựng trên Graphics

Hàm khởi  động chế độ đồ hoạ

* Khởi động chế độ đồ hoạ ta cần một số hàm sau:

– Hàm void initwindow(int x, int y) : x là độ rộng, y là độ cao

– Hàm void initgraph(int *graphdriver, int *graphmode, char *s) dùng để khởi động chế độ đồ hoạ, trong đó s là đường dẫn tới tệp egavga.bgi, nếu s=””(rỗng) thì máy tự tìm tệp egavga.bgi trên thư mục chủ. 

– Hàm int graphresult(void) cho mã lỗi khi khởi động đồ hoạ. Hàm cho giá trị bằng 0 tức là không có lỗi, cho giá trị khác không (mã lỗi) thì có lỗi.

– Hàm char *grapherrormsg(int k) cho lời giải thích bằng tiếng anh của lỗi đồ hoạ, có mã lỗi là k.

– Hàm void closegraph(void) dùng để đóng chế độ đồ hoạ.

Ví dụ: Khởi động đồ hoạ và vẽ một hình chữ nhật.

#include <stdio.h>
#include <conio.h>
#include <graphics.h>
#include <stdlib.h>
int main()
{
   int gd=0,gm=0, maloi; // gd : graphdriver, gm: graphmode,
   initgraph(&gd,&gm,""); // khoi dong do hoa
if ( (maloi=graphresult()) != 0)
{
  printf("khong the khoi dong do hoa \n");
  printf("ma loi : %d \n",maloi);
  printf("Tran Van Nhuom : %s",grapherrormsg(maloi));
  printf("\n an phim bat ky de thoat");
  getch();
  exit(1);
}
bar(50,50,200,300);
getch();
closegraph();
return 0;
}

Kết quả chạy đoặn chương trình.

Hàm đồ hoạ cơ bản trong thư viện Graphics.h ngôn ngữ lập trình C/C++

Các hàm đồ hoạ thông dụng trong C/C++

– Hàm int getmaxx(void): cho toạ độ màn hình x lớn nhất của kiểu màn hình đang dùng.

– Hàm int getmaxy(void): cho toạ độ màn hình y lớn nhất của kiểu màn hình đang dùng.

– Hàm int getmaxcolor(void): cho giá trị màu lớn nhất đang dùng.

– Hàm void setbkcolor(int color): đặt màu nền, màu nền ngầm định ngay sau khi khởi động đồ hoạ sẽ là màu đen BLACK (0).

– Hàm int getbkcolor(void): lấy màu nền hiện tại.

– Hàm void setcolor(int color ): đặt màu nét vẽ. Màu ngầm định ngay khi khởi động là WHITE (15).

– Hàm int getcolor(void): lấy màu vẽ hiện tại.

– Hàm void cleardevice(void): xoá toàn bộ màn hình đồ hoạ (chức năng tương tự clrscr() trong chế độ mode văn bản).

– Hàm void restorecrtmode (void): khôi phục lại chế độ màn hình như trước khi khởi động đồ hoạ.

– Hàm int getgraphmode(void): lấy kiểu màn hình đồ hoạ hiện tại.

– Hàm void setgraphmode(int mode): lựa chọn kiểu đồ hoạ khác với kiểu ngầm định đặt bởi initgraph, xoá màn hình.

– Hàm moveto(int x,int y): di chuyển con trỏ vẽ tới toạ độ (x,y) trên màn hình.

– Hàm int getx(void): cho toạ độ x của con trỏ vẽ hiện tại.

– Hàm int gety(void): cho toạ độ y của con trỏ vẽ hiện tại.

Các hàm dùng vẽ điểm, đường và miền

Hàm vẽ điểm 

– Hàm void putpixel(int x, int y, int color) : tô điểm có toạ độ(x,y) trên màn hình theo màu color.

– Hàm int getpixel(int x, int y) : trả về màu của điểm ảnh tại vị trí có toạ độ (x,y).

Hàm vẽ đường

– Hàm void line(int x1,int y1,int x2,int y2) : vẽ đường thằng nối 2 điểm có toạ độ (x1,y1) và (x2,y2), sau khi vẽ xong con trỏ vẽ quay về vị trí cũ (không thay đổi vị trí)

– Hàm void lineto(int x,int y) : vẽ đường thẳng từ vị trí con trỏ vẽ hiện tại đến điểm có toạ độ (x,y),vẽ xong con trỏ tới điểm có toạ độ (x,y).

– Hàm void linerel(int dx, int dy) : vẽ đường thẳng từ vị trí con trỏ vẽ hiện tại (giả sử con trỏ vẽ hiện tại có toạ độ (x,y) ) đến điểm có toạ độ (x+dx , y+dy), vẽ xong con trỏ tới điểm mới.

– Hàm void setlinestyle(int kiểu, int mẫu, int độ_lớn) : quy định dạng, mẫu và độ lớn của nét vẽ
 + Kiểu có giá trị từ 0 đến 4 :
 + Độ_lớn xác định độ lớn của đường vẽ nó có hai giá trị : NORM_WIDTH (1) nét bình thường, THICK_WIDTH (2) nét vẽ to.
 + Mẫu sử dụng khi kiểu = 4 để tạo mẫu của đường vẽ theo ý người lập trình. 

Hàm vẽ đường

– Hàm void arc(int x, int y, int gd, int gc, int r) : vẽ một cung tròn với tâm có toạ độ (x,y) , bán kính r, từ góc đầu tiên là gr đến góc cuối là gc (góc tính bằng độ). Màu của nét vẽ do hàm setcolor() đặt.

– Hàm void circle(int x, int y, int r) : vẽ đường tròn với tâm có toạ độ (x,y), bán kính r.

– Hàm ellipse(int x, int y, int gd, int gc, int rx, int ry) : vẽ một cũng ellipse với tâm là (x,y) từ góc đầu gd đến góc cuối gc, bán kính trục x là rx, bán kính trục y là ry.

– Hàm void rectangle(int x1, int y1, int x2, int y2) : vẽ một đường chữ nhật có đỉnh trên bên trái là (x1,y1) đỉnh dưới bên phải là (x2,y2).

Hàm vẽ miền

– Hàm void setfillstyle(int mẫu, int màu) : đặt mẫu tô và màu tô cho các hình đặc và miền đóng.  
+Màu có giá trị từ 0 đến 15 (xem lại ở bảng màu). 
+ Mẫu có giá trị từ 0 đến 12 được cho ở bảng dưới. Với mẫu có giá trị 12 thì tự thiết kế mẫu tô theo 8 byte.

– Hàm void pieslice(int x, int y, int gd, int gc, int r) : vẽ và tô màu một hình quạt có tâm là (x,y), bá kính r, từ góc đầu gd đến góc cuối gc.

– Hàm void sector(int x, int y, int gd, int gc, int rx, int ry) : vẽ và tô màu một mảnh ellipse có tâm là (x,y), từ góc đầu đến gd, đến góc cuối gc, có bán kính trục x là rx, bán kính trục y là ry.

– Hàm fillellipse(int x, int y, int rx, int ry) : hàm vẽ và tô màu một elip có tâm (x,y) và bán kính hai trục là rx, ry.

– Hàm void bar(int x1, int y1, int x2, int y2) vẽ và tô màu một hình chữ nhật.

– Hàm void bar3d(int x1, int y1, int x2, int y2, int depth, int top) : vẽ một khối hộp chữ nhật, màu vẽ xác định bởi hàm setcolor. Mặt trước có toạ độ góc trên trái là (x1,y1) góc dưới phải là (x2,y2), được tô màu bởi hàm setfillstyle. Chiều sâu của khối hộp là depth điểm. Nếu top =0 (TOPOFF) thì hộp không có lắp.

Hàm vẽ đường gấp khúc, tô màu nền

– Hàm void drawpoly(int n, int a[]) : vẽ đường gấp khúc qua n điểm (x1, y1), (x2,y2), … , (xn,yn). Trong đó a={x1,y1,x2,y2,….xn,yn}. Nếu điểm cuối cùng trùng với điểm đầu ta được đường gấp khúc khép kín.

– Hàm void fillpoly(int n, int a[]) vẽ và tô màu một đa giác có n đỉnh (x1,y1), ( x2,y2) , … , (xn,yn). Trong đó a={x1,y1,x2,y2,….xn,yn}.

– Hàm floodfill(int x, int y, int màu_biên) : tô màu một miền kín trên màn hình được bao quanh bởi một đường có màu là màu_biên, (x,y) là một điểm tuỳ ý ở bên trong miền kín. Màu tô và mẫu tô xác định bởi hàm setfillstyle. Nếu (x,y) nằm ngoài miền kín thì vùng ngoài miền kín được tô. Nếu trên màn hình không có miền kín như đã chỉ thì cả màn hình được tô màu.

Viết chữ trong đồ hoạ

Để viết chữ trong chế độ đồ hoạ thì trước tiên ta phải chọn font chữ, cỡ chữ, hướng in, căn chỉnh chiều dọc hay ngang đối với điểm in. Cụ thể ta sẽ dùng 6 hàm bên dưới để có thể ghi được văn bản trong màn hình Graphics.

– Hàm void settextstyle(int phông, int hướng, int cỡ): hàm thiết đặt font chữ, hướng in, cỡ chữ.
 + Tham số phông quy định font chữ, các giá trị sau:
 + Tham số hướng quy định hướng in, nhận các giá trị
HORIZ_DIR (0) : in ngang (giá trị ngầm định).
VERT_DIR (1) : in dọc.
 + Tham số cỡ quy định cỡ chữ, có giá trị từ 1 đến 10 (to nhất).

– Hàm void settextjustify(int ngang, int dọc) : quy định nơi hiển thị văn bản của outtextxy theo quan hệ với toạ độ (x,y), của outtext theo quan hệ với vị trí hiện tại của con trỏ (giả sử (x,y)).
 + Tham số ngang có giá trị
 + Tham số dọc có các giá trị
 + Hàm outtextxy(int x, int y, char *s) : in xâu s theo vị trí (x,y).

Ví dụ: settextstyle(0,0,3) ; settextjustify(1,1) ; outtext (230,230, “ICTU TRUONG TOI”);

– Hàm void outtext(char *s) : in xâu s theo vị trí hiện tại của con trỏ vẽ.

– Hàm int texthight(char *s) : trả về chiều cao theo pixel của xâu s.

– Hàm int textwidth(char *s) : trả về bề rộng của xâu s.

Code thăm khảo

Ở đây mình có tổng hợp một vài bài code, bạn có thể thăm khảo hoặc tải về nghịch chơi nhé:

https://www.youtube.com/channel/UC5br0QjPF6VSHJkczLzuBUA/videos

Cảm ơn bạn đã đọc bài viết, hy vọng bài viết này có thể có ích trong quá trình học tập.

5 1 Bỏ phiếu bình chọn
Xếp hạng bài viết
BÀI VIẾT LIÊN QUAN
Đăng ký nhận thông báo
Thông báo email khi
guest
0 Bình luận
Không thể gửi email
Phản hồi nội tuyến

NÊN ĐỌC THÊM

Bạn muốn tìm kiếm gì?

Dịch vụ code thuê

TUICOCACH.COM NHẬN ĐẶT TEXTLINK, BANNER, GP
0
Giáo sư! có thể ném gạch bên dưới nhé!x