Chương 4 GDI+ · 2 Nội dung GDI+ Các cấu trúc lưu trữ cơ bản Lớp Graphics Sự...

34
GDI+ Chương 4

Transcript of Chương 4 GDI+ · 2 Nội dung GDI+ Các cấu trúc lưu trữ cơ bản Lớp Graphics Sự...

Page 1: Chương 4 GDI+ · 2 Nội dung GDI+ Các cấu trúc lưu trữ cơ bản Lớp Graphics Sự kiện Paint Làm việc với Pen và Brush Làm việc với Color, Font và Text

GDI+

Chương 4

Page 2: Chương 4 GDI+ · 2 Nội dung GDI+ Các cấu trúc lưu trữ cơ bản Lớp Graphics Sự kiện Paint Làm việc với Pen và Brush Làm việc với Color, Font và Text

2

Nội dung

GDI+

Các cấu trúc lưu trữ cơ bản

Lớp Graphics

Sự kiện Paint

Làm việc với Pen và Brush

Làm việc với Color, Font và Text

Làm việc với Image

Page 3: Chương 4 GDI+ · 2 Nội dung GDI+ Các cấu trúc lưu trữ cơ bản Lớp Graphics Sự kiện Paint Làm việc với Pen và Brush Làm việc với Color, Font và Text

3

GDI+

GDI+ cung cấp tập các lớp để hiện thực các

chức năng đồ họa trong Windows Forms

GDI+ nằm trong System.Drawing.dll

Page 4: Chương 4 GDI+ · 2 Nội dung GDI+ Các cấu trúc lưu trữ cơ bản Lớp Graphics Sự kiện Paint Làm việc với Pen và Brush Làm việc với Color, Font và Text

4

Tổng quan các lớp

Namespace• using System.Drawing

• using System.Drawing.Drawing2D

Các lớp cơ bản• Point/Points

• Rectangle/RectangleF

• Size/SizeF

• Color

• Pen/Pens/SystemPens

• Brush/Brushes/SystemBrushes

• Font/FontFamily

• Bitmap/Image/Icon

• Graphics

Page 5: Chương 4 GDI+ · 2 Nội dung GDI+ Các cấu trúc lưu trữ cơ bản Lớp Graphics Sự kiện Paint Làm việc với Pen và Brush Làm việc với Color, Font và Text

Các cấu trúc

lưu trữ cơ bản

Page 6: Chương 4 GDI+ · 2 Nội dung GDI+ Các cấu trúc lưu trữ cơ bản Lớp Graphics Sự kiện Paint Làm việc với Pen và Brush Làm việc với Color, Font và Text

6

Cấu trúc Point

Properties

• X: int

• Y: int

• IsEmpty: bool

Methods

• void Offset(int dx, int dy)

Point p=new Point(2,5);

Page 7: Chương 4 GDI+ · 2 Nội dung GDI+ Các cấu trúc lưu trữ cơ bản Lớp Graphics Sự kiện Paint Làm việc với Pen và Brush Làm việc với Color, Font và Text

7

Cấu trúc PointF

Properties

• X: float

• Y: float

• IsEmpty: bool

PointF p=new PointF(2,5);

Page 8: Chương 4 GDI+ · 2 Nội dung GDI+ Các cấu trúc lưu trữ cơ bản Lớp Graphics Sự kiện Paint Làm việc với Pen và Brush Làm việc với Color, Font và Text

8

Cấu trúc Size

Properties

• Width: int

• Height: int

• IsEmpty: bool

Size s=new Size(2,5);

Page 9: Chương 4 GDI+ · 2 Nội dung GDI+ Các cấu trúc lưu trữ cơ bản Lớp Graphics Sự kiện Paint Làm việc với Pen và Brush Làm việc với Color, Font và Text

9

Cấu trúc SizeF

Properties

• Width: float

• Height: float

• IsEmpty: bool

Methods:

• Size ToSize()

• PointF ToPointF()

Size s=new Size(2,5);

Page 10: Chương 4 GDI+ · 2 Nội dung GDI+ Các cấu trúc lưu trữ cơ bản Lớp Graphics Sự kiện Paint Làm việc với Pen và Brush Làm việc với Color, Font và Text

10

Cấu trúc Rectangle/ RectangleF

Properties

• Width: int/float

• Height : int/float

• Left, Top, Right, Bottom:

int/float

• X, Y: int/float

• IsEmpty: bool

Methods

• bool Contains(Point(F) p)

• bool Contains(Rectangle(F) r)

Rectangle rect2 = new Rectangle(20, 30, 30, 10);

Page 11: Chương 4 GDI+ · 2 Nội dung GDI+ Các cấu trúc lưu trữ cơ bản Lớp Graphics Sự kiện Paint Làm việc với Pen và Brush Làm việc với Color, Font và Text

11

Cấu trúc Color

Được dùng để tạo màu cho

các graphics trong GDI+.

141 màu: Color.AliceBlue

Color.AntiqueWhite

Color.Yellow

Color.YellowGreen

Pha màu:

• Color Color.FromArgb(int r, int g, int b)

• Color Color.FromArgb(int a, int r, int g, int b)

Page 12: Chương 4 GDI+ · 2 Nội dung GDI+ Các cấu trúc lưu trữ cơ bản Lớp Graphics Sự kiện Paint Làm việc với Pen và Brush Làm việc với Color, Font và Text

Lớp Graphics

Page 13: Chương 4 GDI+ · 2 Nội dung GDI+ Các cấu trúc lưu trữ cơ bản Lớp Graphics Sự kiện Paint Làm việc với Pen và Brush Làm việc với Color, Font và Text

13

Lớp Graphics

Lớp Graphics: thể hiện bề mặt vẽ GDI+ (control, bitmap)

Lấy đối tượng graphics

• Cách 1: Override phương thức OnPaint()

• Cách 2: Bắt sự kiện Paint

• Cách 3: Dùng phương thức ctr.CreateGraphic()

• Cách 4: Dùng phương thức tĩnh của Graphics: FromImage,

FromHwnd, và FromHdc để vẽ trên bitmap, window handle và

window handles của device context

Page 14: Chương 4 GDI+ · 2 Nội dung GDI+ Các cấu trúc lưu trữ cơ bản Lớp Graphics Sự kiện Paint Làm việc với Pen và Brush Làm việc với Color, Font và Text

14

Lớp Graphics

protected override void OnPaint(PaintEventArgs e)

{

Graphics g=e.Graphics;

base.OnPaint(e);

}

private void mainForm_Paint(object sender, PaintEventArgs e)

{

Graphics g=e.Graphics;

}

Page 15: Chương 4 GDI+ · 2 Nội dung GDI+ Các cấu trúc lưu trữ cơ bản Lớp Graphics Sự kiện Paint Làm việc với Pen và Brush Làm việc với Color, Font và Text

15

Lớp Graphics

private void PaintMe(Control testcontrol)

{

Graphics g=testcontrol.CreateGraphics();

. . .

g.Dispose();

}

protected override void OnPaint(PaintEventArgs e)

{

Bitmap bmp=new Bitmap("Water Lilies.jpg");

Graphics g = Graphics.FromImage(bmp);

...}

Page 16: Chương 4 GDI+ · 2 Nội dung GDI+ Các cấu trúc lưu trữ cơ bản Lớp Graphics Sự kiện Paint Làm việc với Pen và Brush Làm việc với Color, Font và Text

16

Lớp Graphics

Lưu và phục hồi trạng thái đối tượng graphics

Graphics g = …

GraphicsState state = g.Save( );

// Thao tác

g.Restore(state);

Page 17: Chương 4 GDI+ · 2 Nội dung GDI+ Các cấu trúc lưu trữ cơ bản Lớp Graphics Sự kiện Paint Làm việc với Pen và Brush Làm việc với Color, Font và Text

17

Lớp Graphics

Hệ toạ độ

• Hệ toạ độ Đề Cát

• Hệ toạ độ thế giới

Page 18: Chương 4 GDI+ · 2 Nội dung GDI+ Các cấu trúc lưu trữ cơ bản Lớp Graphics Sự kiện Paint Làm việc với Pen và Brush Làm việc với Color, Font và Text

18

Phương thức của lớp Graphics

Phương thức vẽ

DrawArc DrawIcon DrawPath

DrawBezier DrawIconUnstretched DrawPie

DrawBeziers DrawImage DrawPolygon

DrawClosedCurve DrawImageUnscaled DrawRectangle

DrawCurve DrawLine DrawRectangles

DrawEllipse DrawLines DrawString

Page 19: Chương 4 GDI+ · 2 Nội dung GDI+ Các cấu trúc lưu trữ cơ bản Lớp Graphics Sự kiện Paint Làm việc với Pen và Brush Làm việc với Color, Font và Text

19

Phương thức của lớp Graphics

Phương thức tô

FillClosedCurve FillPie FillRectangles

FillEllipse FillPolygon FillRegion

FillPath FillRectangle

Page 20: Chương 4 GDI+ · 2 Nội dung GDI+ Các cấu trúc lưu trữ cơ bản Lớp Graphics Sự kiện Paint Làm việc với Pen và Brush Làm việc với Color, Font và Text

Pen và Brush

Page 21: Chương 4 GDI+ · 2 Nội dung GDI+ Các cấu trúc lưu trữ cơ bản Lớp Graphics Sự kiện Paint Làm việc với Pen và Brush Làm việc với Color, Font và Text

21

Lớp Pen/Pens

Được dùng để chỉ màu, width, styles của nét vẽ

Không cho thừa kế

Pen ourpen=new Pen(Color.Blue,5);

Pens cung cấp 141 penPens.AliceBlue

Pens.AntiqueWhite

Pens.Yellow

Pens.YellowGreen

Page 22: Chương 4 GDI+ · 2 Nội dung GDI+ Các cấu trúc lưu trữ cơ bản Lớp Graphics Sự kiện Paint Làm việc với Pen và Brush Làm việc với Color, Font và Text

22

Lớp Brush/Brushes

Được dùng để tô màu hình.

Lớp Abstract nên không thể tạo đối tượng

Lớp dẫn xuất

• HatchBrush

• LinearGradientBrush

• PathGradientBrush

• SolidBrush

• TextureBrush

SolidBrush myBrush = new SolidBrush(Color.Blue);

Page 23: Chương 4 GDI+ · 2 Nội dung GDI+ Các cấu trúc lưu trữ cơ bản Lớp Graphics Sự kiện Paint Làm việc với Pen và Brush Làm việc với Color, Font và Text

23

Lớp Brush/Brushes

Brushes cung cấp 141 brushBrushes.AliceBlueBrushes.AntiqueWhite … Brushes.YellowBrushes.YellowGreen

SolidBrush: màu• SolidBrush brush = new SolidBrush(Color);

TextureBrush: ảnh• TextureBrush b = new TextureBrush(bmp);

• WrapMode: Clamp: Vẽ 1 lầnTile: defaultTileFlipX/TileFlipY:Lật 1 hướng X/YTileFlipXY: Lật 2 hướng

Page 24: Chương 4 GDI+ · 2 Nội dung GDI+ Các cấu trúc lưu trữ cơ bản Lớp Graphics Sự kiện Paint Làm việc với Pen và Brush Làm việc với Color, Font và Text

24

Lớp Brush/Brushes

HatchBrush

• HatchStyle: 56 kiểu

• Màu ForeColor

• Màu BackColor

HatchBrush brush = new HatchBrush(HatchStyle.Cross, Color.LawnGreen);

Page 25: Chương 4 GDI+ · 2 Nội dung GDI+ Các cấu trúc lưu trữ cơ bản Lớp Graphics Sự kiện Paint Làm việc với Pen và Brush Làm việc với Color, Font và Text

25

Lớp Brush/Brushes

Gradient Brush

• Màu bắt đầu

• Màu kết thúc

• Hướng gradient

• Vùng gradient (option)

Page 26: Chương 4 GDI+ · 2 Nội dung GDI+ Các cấu trúc lưu trữ cơ bản Lớp Graphics Sự kiện Paint Làm việc với Pen và Brush Làm việc với Color, Font và Text

26

Lớp Font

Thông tin cơ bản font: Tên Font, kích thước,

kiểu dáng (đậm, nghiêng, …)

Tạo Font

• f = new Font(Font fName, FontStyle style);

• f = new Font(Font fName, FontStyle style);

• f = new Font(string fontName, float size);

• f = new Font(string fontName, float size,

FontStyle style);

• …

Page 27: Chương 4 GDI+ · 2 Nội dung GDI+ Các cấu trúc lưu trữ cơ bản Lớp Graphics Sự kiện Paint Làm việc với Pen và Brush Làm việc với Color, Font và Text

Một số phương thức vẽ cơ bản

Page 28: Chương 4 GDI+ · 2 Nội dung GDI+ Các cấu trúc lưu trữ cơ bản Lớp Graphics Sự kiện Paint Làm việc với Pen và Brush Làm việc với Color, Font và Text

28

Phương thức DrawLine()

Phương thức DrawLine() của lớp Graphics

được dùng để vẽ một đường thẳng trên màn

hình

public void DrawLine(Pen, Point, Point);

public void DrawLine(Pen, PointF, PointF);

public void DrawLine(Pen, int, int, int, int);

public void DrawLine(Pen, float, float, float, float);

Danh sách Overloaded:

Page 29: Chương 4 GDI+ · 2 Nội dung GDI+ Các cấu trúc lưu trữ cơ bản Lớp Graphics Sự kiện Paint Làm việc với Pen và Brush Làm việc với Color, Font và Text

29

Phương thức DrawString()

Hiện text lên màn hình không cần phải thông

bất kỳ control

public void DrawString(string, Font, Brush, PointF);

public void DrawString(string, Font, Brush, RectangleF);

public void DrawString(string, Font, Brush, PointF,

StringFormat);

public void DrawString(string, Font, Brush, RectangleF,

StringFormat);

public void DrawString(string, Font, Brush, float, float);

public void DrawString(string, Font, Brush, float, float,

StringFormat);

Danh sách Overloaded:

StringFormat sf = new StringFormat();

sf.FormatFlags = StringFormatFlags. DirectionVertical;

sf.Alignment = StringAlignment.Center;

Page 30: Chương 4 GDI+ · 2 Nội dung GDI+ Các cấu trúc lưu trữ cơ bản Lớp Graphics Sự kiện Paint Làm việc với Pen và Brush Làm việc với Color, Font và Text

30

Phương thức DrawImage()

Được dùng để vẽ các image dùng bất kỳ đối

tượng image nào (gif, jpg, bmp, …)

public void DrawImage(Image, Point)

public void DrawImage(Image, Point[])

public void DrawImage(Image, PointF)

public void DrawImage(Image, PointF[])

public void DrawImage(Image, Rectangle)

Constructors:

Page 31: Chương 4 GDI+ · 2 Nội dung GDI+ Các cấu trúc lưu trữ cơ bản Lớp Graphics Sự kiện Paint Làm việc với Pen và Brush Làm việc với Color, Font và Text

31

Vẽ ảnh JPG

protected override void OnPaint(PaintEventArgs p_event)

{

int x_coord,y_coord;

Image testimage=Image.FromFile("Water lilies.jpg");

Graphics graf=p_event.Graphics;

x_coord=10; y_coord=10;

graf.DrawImage(testimage, x_coord, y_coord);

}

Page 32: Chương 4 GDI+ · 2 Nội dung GDI+ Các cấu trúc lưu trữ cơ bản Lớp Graphics Sự kiện Paint Làm việc với Pen và Brush Làm việc với Color, Font và Text

32

Invalidate

Chức năng: Ra lệnh một vùng nào đó phải vẽ lại

Invalidate( ) Invalidate Vùng vùng của control

Invalidate(Boolean) Nếu Boolean là true thì invaludate các control con

Invalidate(Rectangle) Invalidates vùng được chỉ bởi hình chữ nhật

Invalidate(Region) Invalidates region chỉ ra

Invalidate(Rectangle, Boolean)

Invalidates vùng Rectangle, và nếu Boolean là

true thì invalidate các control con

Invalidate(Region, Boolean)

Invalidates vùng region, và nếu Boolean là true

thì invalidate các control con

Page 33: Chương 4 GDI+ · 2 Nội dung GDI+ Các cấu trúc lưu trữ cơ bản Lớp Graphics Sự kiện Paint Làm việc với Pen và Brush Làm việc với Color, Font và Text

33

Hủy các đối tượng

Khi dùng xong các đối tượng thì chúng ta

phải hủy các đối tượng

Cú pháp: obj.Dispose()

Chú ý: Hủy các đối tượng nào được tạo bằng

từ khóa new

Page 34: Chương 4 GDI+ · 2 Nội dung GDI+ Các cấu trúc lưu trữ cơ bản Lớp Graphics Sự kiện Paint Làm việc với Pen và Brush Làm việc với Color, Font và Text

34

Dữ liệu Enum

Chuyển các giá trị enum thành chuỗi

• String[] s =

Enum.GetNames(typeof(KieuEnum));

Chuyển chuỗi sang enum

• KieuEnum value =

(KieuEnum)Enum.Parse(typeof(KieuEnum), s);