33
L p trình trên môi tr ng Windows ườ GDI+ Tr n Duy Hoàng [email protected]

Lập trình trên môi trường Windows - GDI

Embed Size (px)

DESCRIPTION

Lập trình trên môi trường WindowsGDI+Trần Duy Hoàng [email protected]ội dung Giới thiệu GDI+ Đối tượng Graphic● ● Invalidate Tạo form có hình dạng bất kỳ Kỹ thuật chống flickerCác hàm vẽ Các hàm tô màu Pen BrushGiớ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,

Citation preview

Page 1: Lập trình trên môi trường Windows - GDI

L p trình trên môi tr ng Windowsậ ườ

GDI+

Tr n Duy Hoàngầ[email protected]

Page 2: Lập trình trên môi trường Windows - GDI

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ỹ ậ ố

Page 3: Lập trình trên môi trường Windows - GDI

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, …. ồ

Page 4: Lập trình trên môi trường Windows - GDI

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.ự ệ ẽ ớ

Page 5: Lập trình trên môi trường Windows - GDI

Đ 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 ượ

Page 6: Lập trình trên môi trường Windows - GDI

Đ i t ng Graphicố ượ

Ví dụ

private void Form1_Paint(object sender, PaintEventArgs e)

{

e.Graphics.DrawRectangle(Pens.Blue, 10, 10, 100, 100);

}

Page 7: Lập trình trên môi trường Windows - GDI

Đ 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ẽ ả

Page 8: Lập trình trên môi trường Windows - GDI

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

Page 9: Lập trình trên môi trường Windows - GDI

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

Page 10: Lập trình trên môi trường Windows - GDI

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

Page 11: Lập trình trên môi trường Windows - GDI

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

Page 12: Lập trình trên môi trường Windows - GDI

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

Page 13: Lập trình trên môi trường Windows - GDI

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

Page 14: Lập trình trên môi trường Windows - GDI

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

Page 15: Lập trình trên môi trường Windows - GDI

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

Page 16: Lập trình trên môi trường Windows - GDI

Đ 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ữ ậ

Page 17: Lập trình trên môi trường Windows - GDI

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

Page 18: Lập trình trên môi trường Windows - GDI

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)

Page 19: Lập trình trên môi trường Windows - GDI

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ạ ọ ớ ơ ắ

Page 20: Lập trình trên môi trường Windows - GDI

Brush

Ví d : TextureBrushụ

Bitmap image = new Bitmap("images/image1.jpg");

TextureBrush texture = new TextureBrush(image);

e.Graphics.FillEllipse(texture, 100, 100, 400, 200);

Page 21: Lập trình trên môi trường Windows - GDI

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

}

Page 22: Lập trình trên môi trường Windows - GDI

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ể ị ủ

Page 23: Lập trình trên môi trường Windows - GDI

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

Page 24: Lập trình trên môi trường Windows - GDI

T o form có hình d ng b t kỳạ ạ ấ

Page 25: Lập trình trên môi trường Windows - GDI

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

Page 26: Lập trình trên môi trường Windows - GDI

T o form có hình d ng b t kỳạ ạ ấ

Page 27: Lập trình trên môi trường Windows - GDI

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ố ượ

Page 28: Lập trình trên môi trường Windows - GDI

K thu t ch ng Flickerỹ ậ ố

Cách 1 :● Trong s ki n Load c a Form ta chèn đo n code ự ệ ủ ạ

sau

Page 29: Lập trình trên môi trường Windows - GDI

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

Page 30: Lập trình trên môi trường Windows - GDI

K thu t ch ng Flickerỹ ậ ố

Page 31: Lập trình trên môi trường Windows - GDI

K thu t ch ng Flickerỹ ậ ố

Page 32: Lập trình trên môi trường Windows - GDI

K thu t ch ng Flickerỹ ậ ố

Page 33: Lập trình trên môi trường Windows - GDI

Tr n Duy Hoàng - [email protected]ầ02/15/11 33/10

Th o lu nả ậ