Bài viết này mình xin hướng dẫn các bạn cách vẽ đường thẳng,dấu mũi tên,đường đứt nét,chữ đánh dấu điểm và trang trí màu trong việc vẽ hình đồ họa dựa trên ngôn ngữ C#
Mở Visual Studio,khởi tạo Winform Application,và thay đổi tên thành BeginGDI.cs
Vào Toolbox chọn PictureBox như hình dưới:

Hệ tọa độ quy định trong Visual Studio khác với cách vẽ vốn dĩ của một hệ tọa độ thông thường
Có thể biểu diễn cách hình dung đơn giản của hệ tọa độ đó như hệ tọa độ bên dưới
Thay đổi hệ tọa độ trên về hệ tọa độ với cách hiểu thông thường sẻ giúp chúng ta dễ vẽ và dễ tính toán khi gặp những hình vẽ phức tạp

Xây dựng lớp HeToaDoHelper.cs trong ứng dụng của bạn để thay đổi trục tọa độ trên
- public static void ThietLapHeToaDo(Graphics graphics, Point diemGoc)
-
- {
-
- var myMatrix = new Matrix(1, 0, 0, -1, 0, 0);
-
- graphics.Transform = myMatrix;
-
- graphics.TranslateTransform(diemGoc.X, diemGoc.Y, MatrixOrder.Append);
-
- }
-
-
-
- public static void ThietLapHeToaDo(Graphics graphics, int x, int y)
-
- {
-
- var p = new Point(x, y);
-
- ThietLapHeToaDo(graphics, p);
-
- }
public static void ThietLapHeToaDo(Graphics graphics, Point diemGoc)
{
var myMatrix = new Matrix(1, 0, 0, -1, 0, 0);
graphics.Transform = myMatrix;
graphics.TranslateTransform(diemGoc.X, diemGoc.Y, MatrixOrder.Append);
}
public static void ThietLapHeToaDo(Graphics graphics, int x, int y)
{
var p = new Point(x, y);
ThietLapHeToaDo(graphics, p);
}
*Cách vẽ đường thẳng
Nhấn vào picturebox trong form,ở phần Properties,chuyển qua phần Events.Chọn sự kiện Paint đặt tên là duongThang và nhấn đôi vào sự kiện đó

- private void duongThang(object sender, PaintEventArgs e)
-
- {
-
-
-
- HeToaDoHelper.ThietLapHeToaDo(e.Graphics, 200, 150);
-
-
-
-
-
- e.Graphics.DrawLine(new Pen(Brushes.Black, 1.5f), -200, 0, 200, 0);
-
-
-
-
-
- e.Graphics.DrawLine(blackPen, new Point(0, 300), new Point(0, -300));
-
- }
private void duongThang(object sender, PaintEventArgs e)
{
HeToaDoHelper.ThietLapHeToaDo(e.Graphics, 200, 150);
//Ve truc hoanh
e.Graphics.DrawLine(new Pen(Brushes.Black, 1.5f), -200, 0, 200, 0);
//Ve truc tung
e.Graphics.DrawLine(blackPen, new Point(0, 300), new Point(0, -300));
}
Việc tạo đường thẳng được xem như là đã hoàn tất và qua đó thiết lập lên nên hệ tọa độ dựa vào lớp HetoadoHelper.cs được xây dựng ở trước đó
*Vẽ dấu mũi tên
Trong lớp HeToaDoHelper.cs xây dựng đoạn code sau:
- public static void MuiTen(Graphics graphics, Pen p, PointF diemDau, PointF diemCuoi)
-
- {
-
- Pen myPen = new Pen(Color.Yellow);
-
- myPen.Width = 5;
-
- myPen.EndCap = LineCap.ArrowAnchor;
-
- PointF endPoint = new PointF((diemDau.X + diemCuoi.X) / 2, (diemDau.Y + diemCuoi.Y) / 2);
-
- graphics.DrawLine(myPen, diemDau, endPoint);
-
- graphics.DrawLine(new Pen(Brushes.Yellow, 5f), endPoint, diemCuoi);
-
-
-
- }
public static void MuiTen(Graphics graphics, Pen p, PointF diemDau, PointF diemCuoi)
{
Pen myPen = new Pen(Color.Yellow);
myPen.Width = 5;
myPen.EndCap = LineCap.ArrowAnchor;
PointF endPoint = new PointF((diemDau.X + diemCuoi.X) / 2, (diemDau.Y + diemCuoi.Y) / 2);
graphics.DrawLine(myPen, diemDau, endPoint);
graphics.DrawLine(new Pen(Brushes.Yellow, 5f), endPoint, diemCuoi);
}
Xác thực tọa độ điểm đầu và điểm cuối của mũi tên ví dụ:
- var diemDau = new PointF(100,100);
-
- var diemCuoi = new PointF(0, 0);
var diemDau = new PointF(100,100);
var diemCuoi = new PointF(0, 0);
Ta vẽ được mũi tên sau đoạn code dưới đây:
HeToaDoHelper.MuiTen(e.Graphics, pen, diemDau, diemCuoi);
*Đường đứt nét
Chèn 1 đường đứt nét bất kỳ với tạo độ ở bên dưới:
- float[] dashValues = { 5, 2, 15, 4 };
-
- Pen blackPen = new Pen(Color.Black, 0.5f);
-
- blackPen.DashPattern = dashValues;
-
- e.Graphics.DrawLine(blackPen, new Point(0, 300), new Point(0, -300));
*Chữ ghi tên điểm:
Chữ ghi tên điểm được chèn code cùng trong sự kiện paint của picturebox.Ví dụ sau đây là cách chèn chữ S vào hình ở tạo độ quy định sẵn
//VE DIEM S
e.Graphics.DrawString("S", new Font("Times New Roman", 12), Brushes.Black, 600, 60);
Brush myBrush3 = new SolidBrush(Color.Yellow);
Rectangle myRect3 = new Rectangle(600, 60, 5, 5);
*Trang trí màu cho hình vẽ
Khi vẽ đường thẳng hay bất cứ đường gì,trong Graphics có thuộc tính Brushes quy định màu trang trí cho hình vẽ.Cách hình dung:
e.Graphics.DrawLine(new Pen(Brushes.Black, 1.5f), O, U);
e.Graphics.DrawLine(new Pen(Brushes.Blue, 5f), A, B);
e.Graphics.DrawLine(new Pen(Brushes.Blue, 5f), A, X);
e.Graphics.DrawLine(new Pen(Brushes.Blue, 5f), B, Y);
e.Graphics.DrawLine(new Pen(Brushes.Yellow, 3f), O, C2);
e.Graphics.DrawLine(new Pen(Brushes.Yellow, 3f), O, C3);
Bài viết này mình cung cấp cho các bạn những kĩ năng tuy nhỏ nhưng từ đó các bạn có thể phát triển lên thành các chương trình lớn hơn,mà hình ảnh của nó chắc chắn sẻ khiến các bạn không tiếc công mình đã tìm hiểu





Thân!
Tài liệu tham khảo:Lập trình Manage GDI+ với C#-Thầy Lê Hoàng Dũng