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);