phamtrungduc posted on November 17, 2009 23:55

 

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

  1. public static void ThietLapHeToaDo(Graphics graphics, Point diemGoc)   
  2.   
  3.         {   
  4.   
  5.             var myMatrix = new Matrix(1, 0, 0, -1, 0, 0);   
  6.   
  7.             graphics.Transform = myMatrix;   
  8.   
  9.             graphics.TranslateTransform(diemGoc.X, diemGoc.Y, MatrixOrder.Append);   
  10.   
  11.         }   
  12.   
  13.     
  14.   
  15.         public static void ThietLapHeToaDo(Graphics graphics, int x, int y)   
  16.   
  17.         {   
  18.   
  19.             var p = new Point(x, y);   
  20.   
  21.             ThietLapHeToaDo(graphics, p);   
  22.   
  23.         } 

*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 đó

 

  1. private void duongThang(object sender, PaintEventArgs e)   
  2.   
  3.       {   
  4.   
  5.     
  6.   
  7.         HeToaDoHelper.ThietLapHeToaDo(e.Graphics, 200, 150);   
  8.   
  9.     
  10.   
  11.             //Ve truc hoanh   
  12.   
  13.         e.Graphics.DrawLine(new Pen(Brushes.Black, 1.5f), -200, 0, 200, 0);   
  14.   
  15.     
  16.   
  17.             //Ve truc tung   
  18.   
  19.         e.Graphics.DrawLine(blackPen, new Point(0, 300), new Point(0, -300));   
  20.   
  21.      } 

 

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:

  1. public static void MuiTen(Graphics graphics, Pen p, PointF diemDau, PointF diemCuoi)   
  2.   
  3.         {   
  4.   
  5.             Pen myPen = new Pen(Color.Yellow);   
  6.   
  7.             myPen.Width = 5;   
  8.   
  9.             myPen.EndCap = LineCap.ArrowAnchor;   
  10.   
  11.             PointF endPoint = new PointF((diemDau.X + diemCuoi.X) / 2, (diemDau.Y + diemCuoi.Y) / 2);   
  12.   
  13.             graphics.DrawLine(myPen, diemDau, endPoint);   
  14.   
  15.             graphics.DrawLine(new Pen(Brushes.Yellow, 5f), endPoint, diemCuoi);   
  16.   
  17.     
  18.   
  19.         } 

Xác thực tọa độ điểm đầu và điểm cuối của mũi tên ví dụ:

  1. var diemDau = new PointF(100,100);   
  2.   
  3. 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:

  1. float[] dashValues = { 5, 2, 15, 4 };   
  2.   
  3. Pen blackPen = new Pen(Color.Black, 0.5f);   
  4.   
  5. blackPen.DashPattern = dashValues;   
  6.   
  7. 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

Digg It!DZone It!StumbleUponTechnoratiRedditDel.icio.usNewsVineFurlBlinkList

Posted in:   Tags:

Page List

    Calendar

    «  September 2010  »
    MoTuWeThFrSaSu
    303112345
    6789101112
    13141516171819
    20212223242526
    27282930123
    45678910
    View posts in large calendar

    Recent Comments

    Disclaimer
    The opinions expressed herein are my own personal opinions and do not represent my employer's view in anyway.

    © Copyright 2010 SFI.VN Team