Bài giảng Lập trình trên môi trường Windows - Chương 6: GDI - Phần 2 - Trần Duy Hoàng

pdf 32 trang hoanguyen 3030
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Lập trình trên môi trường Windows - Chương 6: GDI - Phần 2 - Trần Duy Hoàng", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfbai_giang_lap_trinh_tren_moi_truong_windows_chuong_6_gdi_pha.pdf

Nội dung text: Bài giảng Lập trình trên môi trường Windows - Chương 6: GDI - Phần 2 - Trần Duy Hoàng

  1. L p trình trên môi tr ng windows ậ ườ GDI ++
  2. Nộ i dung  Gi i thi u GDI+  Invalidate ớ ệ  Đ i t ng Graphic  T o form có hình d ng ố ượ ạ ạ b t kỳ ● Các hàm vẽ ấ ●  K thu t ch ng flicker Các hàm tô màu ỹ ậ ố  Pen  Brush
  3. Gi i thi u GDI+ ớ ệ  Th c hi n v trên môi tr ng .NET ự ệ ẽ ườ  Cung c p t p namespace, l p h ng đ i t ng l n ấ ậ ớ ướ ố ượ ớ cho vi c th c hi n v ệ ự ệ ẽ  Device Context đ c thay th b ng đ i t ng ượ ế ằ ố ượ Graphic  M i control đ u có đ i t ng Graphic đ v nó, bao ỗ ề ố ượ ể ẽ g m Form, Button, TextBox, . ồ
  4. Các namespace Tên Mô tả System.Drawing Đị nh nghĩa nh ữ ng đ ố i t ượ ng v ẽ c ơ b ả n (Fonts, Pens, Brushes, ) và đố i t ượ ng Graphic System.Drawing.Drawing2D Cung cấ p nh ữ ng đ ố i t ượ ng v ẽ vector 2 chiề u nh ư gradient brushes, gradient pens, System.Drawing.Image Thao tác vớ i hình ả nh nh ư th ự c hi ệ n v ẽ , lấ y thông tin kích th ướ c ả nh, System.Drawing.Printing Thự c hi ệ n in; cung c ấ p nh ữ ng đ ố i t ượ ng giao tác vớ i printer System.Drawing.Text Thự c hi ệ n v ẽ v ớ i các font.
  5. Đ i t ng Graphic ố ượ  Đ i t ng quan tr ng c a GDI+ ố ượ ọ ủ  M i thao tác v đ u th c hi n trên đ i t ng ọ ẽ ề ự ệ ố ượ Graphic  M i control đ u có thu c tính Graphic dùng đ v ọ ề ộ ể ẽ chính nó  Có 2 cách truy xu t ấ ● S ki n Paint : e.Graphics.DrawLine( ) ự ệ ● Hàm CreateGraphic() ả nh v ẽ s ẽ m ấ t đi khi Form đ ưấ c Reload
  6. Đ i t ng Graphic ố ượ  Ví dụ private void Form1_Paint(object sender, PaintEventArgs e) { e.Graphics.DrawRectangle(Pens.Blue, 10, 10, 100, 100); }
  7. Đ i t ng Graphic ố ượ  Danh sách các hàm v ẽ Hàm Ý nghĩa DrawArc Vẽ hình cung ellipse DrawEllipse Vẽ hình ellipse DrawLine Vẽ đ ườ ng th ẳ ng DrawPolygon Vẽ đa giác DrawRectangle Vẽ hình ch ữ nh ậ t DrawString Vẽ chu ổ i DrawImage Vẽ hình ả nh
  8. Đ i t ng Graphic ố ượ  Ví dụ : // tạ o bút v ẽ Pen pen = new Pen(Color.Blue, 2); // v đ ng t đi m 0, 0 đ n 100, 100 ẽ ườ ừ ể ế e.Graphics.DrawLine(pen, 0, 0, 100, 100);
  9. Đ i t ng Graphic ố ượ  Ví dụ : // tạ o bút v ẽ Pen pen = new Pen(Color.Blue, 2); // v hình ellipse n m trong hình ch nh t ẽ ằữ ậ // t đi m 0,0 có đ r ng 300, cao 200 ừ ể ộ ộ e.Graphics.DrawEllipse(pen, 0, 0, 300, 200);
  10. Đ i t ng Graphic ố ượ  Ví dụ : // tạ o bút v ẽ Pen pen = new Pen(Color.Blue, 2); // v cung ellipse n m trong hình ch nh t ẽ ằữ ậ // t đi m 0,0 có đ r ng 300, cao 200 ừ ể ộ ộ // v t góc 90 đ v ti p 180 đ ẽừ ộ ẽ ế ộ e.Graphics.DrawArc(pen, 0, 0, 300, 200, 90, 180);
  11. Đ i t ng Graphic ố ượ  Ví dụ : // tạ o bút v ẽ Pen pen = new Pen(Color.Blue, 2); // v hình ch nh t t đi m 0,0 ẽữ ậ ừ ể // có độ r ộ ng 300, cao 200 e.Graphics.DrawRectangle(pen, 10, 10, 300, 200);
  12. Đ i t ng Graphic ố ượ  Ví dụ : // tạ o bút v ẽ Pen pen = new Pen(Color.Blue, 2); // vẽ đa giác có 4 đ ỉ nh 10,10 100,180 // 200,180 và 200,10 Point[] polygon = new Point[4]; polygon[0] = new Point(10, 10); polygon[1] = new Point(100, 180); polygon[2] = new Point(200, 180); polygon[3] = new Point(200, 10); e.Graphics.DrawPolygon(pen, polygon);
  13. Đ i t ng Graphic ố ượ  Ví dụ : // tạ o bút v ẽ Pen pen = new Pen(Color.Blue, 2); // v hình bánh n m trong hình ch nh t ẽ ằữ ậ // t đi m 0,0 có đ r ng 300, cao 200 ừ ể ộ ộ // v t góc 0 đ v ti p 90 đ ẽừ ộ ẽ ế ộ e.Graphics.DrawPie(pen, 0, 0, 300, 200, 0, 90);
  14. Đ i t ng Graphic ố ượ  Ví dụ : // tạ o bút v ẽ Pen pen = new Pen(Color.Blue, 2); // t o các đi m c a đ ng cong ạể ủ ư ờ Point start = new Point(100, 100); Point control1 = new Point(200, 50); Point control2 = new Point(350, 100); Point end = new Point(100, 300); // v đ ng cong ẽ ườ e.Graphics.DrawBezier(pen, start, control1, control2, end);
  15. Đ i t ng Graphic ố ượ  Ví dụ : // v chu i t i v trí 0,0 ẽỗ ạ ị string text = "Hello world"; Font font = new Font("Arial", 16); e.Graphics.DrawString(text, font, Brushes.Blue, 0, 0); // vẽ hình t ạ i v ị trí 50,50 Bitmap image = new Bitmap("images/image1.jpg"); e.Graphics.DrawImage(image, 50, 50);
  16. Đ i t ng Graphic ố ượ  Danh sách các hàm tô màu Hàm Ý nghĩa FillEllipse Tô hình ellipse FillPie Tô hình bánh FillPolygon Tô đa giác FillRectangle Tô hình chữ nh ậ t
  17. Đ i t ng Graphic ố ượ  Ví dụ : // Create solid brush. SolidBrush blueBrush = new SolidBrush(Color.Blue); // Fill rectangle to screen. e.Graphics.FillRectangle(blueBrush, 0, 0, 200, 200);
  18. Pen  Dùng Pen có sẵ n thông qua Pens ● Pens.AliceBlue ● Pens.Aqua ● Pens.Black ● Pens.Brown ●  Dùng Pen do t t o thông qua l p Pen ự ạ ớ Pen pen = new Pen (Color.Red, 2)
  19. Brush  Dùng Brush t có ự ● Brushes.Lavendar ● Brushes.Ivory ● Brushes.LightBlue  TextureBrush: dùng nh image đ v ả ể ẽ  SolidBrush:T o c v i màu đ n s c ạ ọớ ơ ắ
  20. Brush  Ví dụ : TextureBrush Bitmap image = new Bitmap("images/image1.jpg"); TextureBrush texture = new TextureBrush(image); e.Graphics.FillEllipse(texture, 100, 100, 400, 200);
  21. Invalidate  Hành độ ng Invalidate dùng đ ấ th ấ c hi ệ n v ẽ l ạ i Form hoặ c 1 vùng nào đó trên Form.  Sấ d ụ ng hàm : Invalidate private void timer1_Tick(object sender, EventArgs e) { this.Invalidate(); }
  22. T o form có hình d ng b t kỳ ạ ạ ấ  Thu c tính Region : xác đ nh vùng hi n th c a form ộ ị ể ị ủ  L p GraphicsPath : dùng đ t o đ ng biên cho ớ ể ạ ườ vùng hi n th c a form ể ị ủ
  23. T o form có hình d ng b t kỳ ạ ạ ấ  Ví dụ : // trong s kiên form load ự // tạ o biên cho form có hình ellipse GraphicsPath path = new GraphicsPath(); path.AddEllipse(0, 0, 300, 300); // t o vùng hi n th c a form d a trên biên ạể ị ủ ự this.Region = new Region(path);
  24. T o form có hình d ng b t kỳ ạ ạ ấ
  25. T o form có hình d ng b t kỳ ạ ạ ấ  Ví dụ : // tạ o biên cho form GraphicsPath path = new GraphicsPath(); path.AddArc(0, 0, 300, 300, 0, 180); path.AddLine(0, 150, 0, 0); path.AddLine(0, 0, 300, 0); path.AddLine(300, 0, 300, 150); // t o vùng hi n th c a form d a trên biên ạể ị ủ ự this.Region = new Region(path);
  26. T o form có hình d ng b t kỳ ạ ạ ấ
  27. K thu t ch ng Flicker ỹ ậ ố  Khi s ki n Paint đ c g i, m i đ i t ng s đ c ự ệ ượ ọ ọ ố ượ ẽ ượ v tr c ti p trên Device Context (đ i t ng ẽ ự ế ố ượ Graphics). Đi u này s gây hi n t ng flicker trong ề ẽ ệ ượ 3 tr ng h p sau: ườ ợ ● Resize màn hình hoặ c user control ● Animation (Kĩ thuậ t Timer + Thay đ ấ i t ọ a đ ộ đ ấ i t ưấ ng vẽ ) ● Drag & Drop 1 đ i t ng ố ượ
  28. K thu t ch ng Flicker ỹ ậ ố  Cách 1 : ● Trong s ki n Load c a Form ta chèn đo n code sau ự ệ ủ ạ
  29. K thu t ch ng Flicker ỹ ậ ố  Cách 2 : ● Override lạ i s ấ ki ệ n v ẽ ả nh n ấ n m ặ c đ ị nh c ủ a Window đấ không th ấ c hi ệ n v ẽ ả nh n ấ n vì nó s ẽ đ ưấ c v ẽ trên MemDC ● V nh lên 1 Bitmap tr c; sau đó m i v vào DC ẽ ả ướ ớ ẽ ● Thay vì v tr c ti p trên Device Context, ta s v vào 1 ẽự ế ẽ ẽ vùng nhấ đ ệ m (double buffer). Khi m ọ i thao tác v ẽ trên vùng đ m xong, ta m i v vào Device Context ệ ớ ẽ
  30. K thu t ch ng Flicker ỹ ậ ố
  31. K thu t ch ng Flicker ỹ ậ ố
  32. K thu t ch ng Flicker ỹ ậ ố