Upload
langtubuon-ckt
View
124
Download
6
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
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 - [email protected]ầ02/15/11 33/10
Th o lu nả ậ