 |
|
Xử lý đối tượng đồ
họa trong vb.net |
|
Trong game Line-NIIT, ta cần hiển thị các đối tượng
hình ảnh trên màn hình: các trái bóng và lưới định
vị. Tôi xin trình bày một số kỹ thuật GDI+ giúp bạn
thao tác với đối tượng đồ họa, phục vụ cho việc tạo
game Line-NIIT. |
|
GDI+ là gì? |
|
GDI+, tiền thân là GDI (Graphics Device Interface),
là một tập hợp các lớp giao diện lập trình ứng dụng,
cho phép thao tác với các đối tượng đồ họa trên các
thiết bị xuất như màn hình và máy in. Đối với GDI,
để truy cập thiết bị kết xuất, bạn phải dùng đối
tượng Device context (DC). DC lưu trữ thông tin về
thiết bị và chuyển các câu lệnh xử lý đồ họa thành
các câu lệnh có thể xuất được trên thiết bị. Đối với
GDI+, DC được đóng gói trong namespace có tên là
System.Drawing.Graphics. Hầu hết các thao tác đối
với đối tượng đồ họa đều được thực hiện thông qua
đối tượng Graphics. |
|
Đoạn mã 1 minh họa việc vẽ các đối tượng cơ bản như
hình chữ nhật, hình tròn (H1). |
Đoạn mã 1
Public Sub Form1_Load(ByVal
sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
Me.InitializeComponent()
‘khai báo một biến device context có kiểu là
Graphics
Dim dc As Graphics = Me.CreateGraphics()
Show()
‘tạo ra một đối tựong bút vẽ
Dim bluePen As Pen = New Pen(Color.Blue, 3)
‘vẽ hình chữ nhật
dc.DrawRectangle(bluePen, 0, 0, 50, 50)
Dim redPen As Pen = New Pen(Color.Red, 2)
dc.DrawEllipse(redPen, 0, 50, 80, 60)
End Sub |
|

H.1 |
|
Với đoạn mã 1, khi ta minimize cửa sổ và sau đó phục
hồi lại cửa sổ thì những hình ta vẽ biến mất. Hoặc
nếu ta di chuyển một cửa sổ nào đó qua cửa sổ chương
trình của ta thì vùng bị che khuất bị xóa. Đó là vì
ta vẽ hình chữ nhật và hình tròn trong hàm xây dựng
lớp (constructor), ta không thể gọi hàm này lần nữa
để vẽ lại các hình khi cần. Đoạn mã 2 dùng để vẽ lại
vùng bị khuất của chương trình (nếu có) thông qua
hàm xử lý sự kiện Paint. Bạn để ý, ta chỉ vẽ vùng
thực sự cần vẽ lại chứ không vẽ lại toàn bộ. Để xác
định vùng cần vẽ lại, ta dùng thuộc tính
ClipRectangle của đối tượng
System.Windows.Forms.PaintEventArgs: |
Đoạn mã 2
Private Sub Form1_Paint(ByVal
sender As Object, ByVal e As
System.Windows.Forms.PaintEventArgs) Handles
Me.Paint
Dim dc As Graphics = e.Graphics()
If (e.ClipRectangle.Top < 132 And
e.ClipRectangle.Left < 82) Then
Dim bluePen As Pen = New Pen(Color.Blue, 3)
dc.DrawRectangle(bluePen, 0, 0, 50, 50)
Dim redPen As Pen = New Pen(Color.Red, 2)
dc.DrawEllipse(redPen, 0, 50, 80, 60)
End If
End Sub |
|
Bút vẽ và cọ vẽ |
|
Bút vẽ (pen) dùng để cho đối tượng Graphics biết
cách vẽ nét như thế nào. Cọ vẽ (brush) cho đối tượng
Graphics biết cách tô màu một vùng như thế nào. Để
tạo đối tượng bút vẽ (pen), ta khai báo như sau: |
|
Dim penBlue as Pen = new Pen
(Color. Blue, 3) |
|
Trong đó, tham số thứ nhất là màu vẽ, tham số thứ
hai là độ dày của nét vẽ. Sau đó ta dùng bút vẽ này
để vẽ hình nào đó: |
Dim dc as Graphics= new
Me.CreateGraphics()
dc.DrawRectangle (penBlue, 0, 0, 100, 100) |
|
Để tạo một cọ vẽ ta khai báo như sau: |
|
Dim blueBrush as Brush= new
Brush(Color.Blue) |
|
Sau đó, bạn dùng cọ vẽ để tô màu các hình hình học: |
‘Public Sub
FillRectangleRectangle(e As PaintEventArgs)
' Create solid brush.
Dim blueBrush As New Brush(Color.Blue)
' Create rectangle.
Dim rect As New Rectangle(0, 0, 200, 200)
' Fill rectangle to screen.
e.Graphics.FillRectangle(blueBrush, rect)
End Sub |
|
Hiển thị hình ảnh |
|
Để hiển thị hình ảnh, ta dùng một số lớp trong
namespace System.Drawing.Image. Câu lệnh sau hiển
thị hình ảnh từ tập tin: |
Dim myImage as Image=
Image.FromFile(“Sample.gif”)
Dim dc as Graphics= Me.CreateGraphics()
dc.DrawImage(myImage, points) |
Trong đó, tham số points là tọa độ điểm cần hiển thị
hình ảnh.
Ngoài ra, có một cách hiển thị hình ảnh dễ dàng hơn
nhiều: dùng đối tượng điều khiển Picture Box. Ta chỉ
cần đưa Picture Box vào trong form và chỉ định tên
tập tin hình ảnh cần hiển thị thông qua thuộc tính
ImageLocation của Picture Box. |
LÊ TRỌNG NHÂN
(Giảng viên NIIT) |
|
Đầu
trang |