Lập trình trên môi trường Windows
GDI+
Trần Duy Hoàng
Nội dung
Giới thiệu GDI+
Đối tượng Graphic
●
Các hàm vẽ
●
Các hàm tô màu
Pen
Brush
Invalidate
Tạo form có hình dạng
bất kỳ
Kỹ thuật chống flicker
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, ….
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.
Đố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
Đối tượng Graphic
Ví dụ
private void Form1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawRectangle(Pens.Blue, 10, 10, 100, 100);
}
Đố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
Đố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);
Đố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);
Đố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);
Đố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);
Đố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);
Đố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);
Đố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);
Đố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);
Đố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
Đố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);
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)
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
Brush
Ví dụ : TextureBrush
Bitmap image = new Bitmap("images/image1.jpg");
TextureBrush texture = new TextureBrush(image);
e.Graphics.FillEllipse(texture, 100, 100, 400, 200);
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();
}
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
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);
Tạo form có hình dạng bất kỳ
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);