lập trình trên môi trường windows - gdi

Post on 22-Oct-2014

124 Views

Category:

Documents

6 Downloads

Preview:

Click to see full reader

DESCRIPTION

Lập trình trên môi trường WindowsGDI+Trần Duy Hoàng tdhoang@hcmus.edu.vnNộ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,

TRANSCRIPT

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

GDI+

Tr n Duy Hoàngầtdhoang@hcmus.edu.vn

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

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

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

K thu t ch ng Flickerỹ ậ ố

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

sau

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

K thu t ch ng Flickerỹ ậ ố

K thu t ch ng Flickerỹ ậ ố

K thu t ch ng Flickerỹ ậ ố

Tr n Duy Hoàng - tdhoang@fit.hcmus.edu.vnầ02/15/11 33/10

Th o lu nả ậ

top related