1
GDI +
ThS. Nguyễn Hà Giang
Khoa CNTT
Nguyen Ha Giang -2008
2
N i Dung
n GDI+
n Chương trình vẽ cơ bản trên Form
n Lớp Graphics và hàm OnPaint()
n Lớp Color và Font
n Lớp Pen và Brush
n Các hàm vẽ đường thẳng, hình chữ nhật, ellipse
n Các hàm vẽ cung, đa giác
n Hiển thị ảnh
n Minh họa Multimedia
Nguyen Ha Giang -2008
3
GDI+
n GDI: Graphical Device Interface
n GDI+ là API (Application programming interface)
cung cấp các lớp cho phép
q Tạo những đồ họa 2D vector
q Thao tác trên font, chuỗi ký tự
q Hiển thị các đường, hình và ảnh…
n Thư viện FCL chứa các lớp thao tác vẽ trong
namespace
q System.
Drawing
n Tất cả các thao tác tô vẽ trên GUI đều thực hiện
bởi chức năng GDI+
Nguyen Ha Giang -2008
4
System.Drawing
structure
class
System.Drawing
Font
FontFamily
Graphics
Icon
Pen
Region
SolidBrush
TextureBrush
Image
Brush
HatchBrush
LinearGradientBrush
PathGradientBrush
SolidBrush
TextureBrush
Color
Point
Rectangle
Size
Nguyen Ha Giang -2008
5
V trên Form
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
protected override void OnPaint(PaintEventArgs e)
{
Graphics g = e.Graphics;
g.DrawString("Hello GDI!", Font, Brushes.Red, 20, 20);
}
}
Nguyen Ha Giang -2008
6
Graphics
n Lớp Graphics thể hiện
q “
Abstract” drawing surface
q Tập hợp những “
tool” cho phép thao tác trên
surface đó
n Để lấy đối tượng Graphics
q Sử dụng thuộc tính Graphics được truyền cho
OnPaint()
q Sử dụng phương thức CreateGraphics() của
control
q Lấy từ đối tượng dẫn xuất từ Bitmap
n Gọi hàm Invalidate() thay vì OnPaint()
Nguyen Ha Giang -2008
7
L y i t ng Graphics
protected override void OnPaint(PaintEventArgs paintevent)
protected override void OnPaint(PaintEventArgs paintevent)
{
Graphics graf=paintevent.Graphics;
}
private void mainForm_Paint(object sender, PaintEventArgs
private void mainForm_Paint(object sender, PaintEventArgs
paintevent)
{
Graphics graf=paintevent.Graphics;
}
Từ tham số PaintEventAtgs
Nguyen Ha Giang -2008
8
L y i t ng Graphics
private void PaintMe(Control testcontrol)
private void PaintMe(Control testcontrol)
{
Graphics graf=testcontrol.CreateGraphics();
. . .
}
protected override void OnPaint(PaintEventArgs
protected override void OnPaint(PaintEventArgs
paintevent)
{
Bitmap bmpimage=new Bitmap("hutech.jpg");
Graphics graf = Graphics.FromImage (bmpimage);
}
Lấy từ control
Lấy từ ảnh
Nguyen Ha Giang -2008
9
DrawString() method
n Hiển thị text trong Graphics cụ thể
q Có nhiều phiên bản
q
DrawString( String text, // Text thể hiện
Font f, // Font
Brush b, // Color & texture
float x, float y);// vị trí góc trái trên
q Tham số Font và Brush không có mặc định nên
phải truyền vào.
Nguyen Ha Giang -2008
10
T a h th ng
(0,0)
(w,0)
(0,h) (w,h)
Gốc tọa độ
(0,0)
(w
1
,0)
(0,h
1
) (w
1
,h
1
)
Form,
Panel,
GroupBox
Control
Nguyen Ha Giang -2008
11
T a h th ng
n Graphics.PageUnit: xác định đơn vị của bề mặt
q GraphicsUnit.
Pixel (default)
q GraphicsUnit.Inch
q GraphicsUnit.Milimeter
q GraphicsUnit.Point
n Graphics.PageScale: tỷ lệ output
q g.PageScale = 1f (default)
Nguyen Ha Giang -2008
12
Color
n Sử dụng màu được định nghĩa trong Color
q Color.Blue, Color.Red, Color.White…
n Sử dụng màu định nghĩa cho hệ thống
q SystemColors.Control, SystemColors.ControlText…
n Sử dụng màu ARGB
q 32 bit để thể hiện màu
q A (alpha) thể hiện mức độ trong suốt (255 opaque)
q RGB là
Red, Green và Blue
q Tạo màu sử dụng hàm FromArgb()
n Color red = Color.FromArgb(255,0,0);
n Color blue = Color.FromArgb(128, 0, 255, 0);
Nguyen Ha Giang -2008
13
Font
n Cách tạo đối tượng Font: new Font(…)
q Có 13 phiên bản của constructor
q Font fa = new Font("Times New Roman", 8);
Font fb = new Font("
Arial", 36, FontStyle.Bold);
Font fc = new Font(fb, FontStyle.Bold | FontStyle.Italic);
Font fd = new Font("Arial", 1, GraphicsUnit.Inch);
q Nếu tên font không tìm thấy thì font mặc định được
sử dụng.
Size = 8 pixel
Size = 1 inch
Nguyen Ha Giang -2008
14
Font
Nguyen Ha Giang -2008
15
Font
n Demo
Time New Roman, 14
Arial, 36
Arial, Bold, Italic, 36
Impact, 1 inch
Nguyen Ha Giang -2008
16
Pen
n Xác định width, style, fill style
n Không cho kế thừa, nhưng tạo thể hiện được
n Trong namespace System.Drawing
q Pen p1 = new Pen(Color.Green);
Pen p2 = new Pen(Color.blue, 10);
n Sử dụng lớp Pens có 141 pen được định nghĩa
trước.
q Pen p3 = Pens.Violet;
Nguyen Ha Giang -2008
17
Pen
Nguyen Ha Giang -2008
18
Brush
n Dùng để tô vùng bên trong của hình
n Lớp Brush là lớp abstract nên không
tạo thể hiện
n Sử dụng các lớp kế thừa sau để tạo
brush
q SolidBrush
q LinearGradientBrush
q TextureBrush
q HatchBrush
n Sử dụng lớp Brushes định nghĩa
trước các brush.
Nguyen Ha Giang -2008
19
Brush
Solid
Hatch
LinearGradient
Texture
Nguyen Ha Giang -2008
20
Bursh
n Demo
Solid Hatch
LinearGradient
Texture
Nguyen Ha Giang -2008
21
Line, Rectangle, Ellipse
n DrawLine
q (
Pen p, int x1, int y1, int x2, int y2)
n DrawRectangle
q (
Pen p, int x, int y, int width, int height)
n DrawEllipse
q (
Pen p, int x, int y, int width, int height)
n FillRectangle
q (
Brush b, int x, int y, int width, int height)
n FillEllipse
q (
Brush b, int x, int y, int width, int height)
Nguyen Ha Giang -2008
22
Line, Rectangle, Ellipse
Nguyen Ha Giang -2008
23
Image
n Lớp Image hiển thị các ảnh bitmap
q Các dạng ảnh: *.bmp, *.gif, *.jpg, *.ico…
n Phương thức static FromFile tạo ảnh từ file
q Image img = Image.FromFile(“hutech.bmp”);
q Image img2 = Image.FromFile(“hutech.gif”);
n Phương thức DrawImage xuất ảnh lên Graphics
q g.DrawImage(img, 10, 10);
q G.DrawImage(img2, 10, 10, 100,100); // scale trong
hình chữ nhật kích thước 100x100
Nguyen Ha Giang -2008
24
Image
Nguyen Ha Giang -2008
25
Image
Ellipse được vẽ lên ảnh, rồi sau
đó với vẽ ảnh lên Form