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

Transcript
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ả ậ