Vẽ các đối tượng hình ảnh (image):

Một phần của tài liệu Nghiên cứu JM và xây dựng ứng dụng minh họa (Đặng Nguyễn Kim Anh vs Đào Anh Tuấn) - 2 potx (Trang 54 - 58)

Lớp Graphics hỗ trợ một phương thức duy nhất để vẽ hình ảnh lên màn hình, đó là: Lớp Graphics: javax.microedition.lcdui.Graphics

Phương thức Mô tả

void drawImage (Image img, int x, int

y, int anchor)

vẽđối tượng Image img lên màn hình

Bảng 5.15 Vẽ hình ảnh

Đây chỉ là bước cuối cùng để vẽ một hình ảnh lên màn hình, các bước trước đó dùng để tạo đối tượng Image cũng như load hình ảnh lên đối tượng đó. Đối tượng Image gồm hai loại: có thể thay đổi hình ảnh (Mutable Image) và hình ảnh cốđịnh (Immutable Image).

Các bước để vẽđối tượng Image lên màn hình: • Immutable Image:

1.Tạo đối tượng hình ảnh (thường là load trực tiếp từ file):

Image img= Image.createImage (“\imageTest.png”);

2.Hiển thịđối tượng lên màn hình: protected void paint (Graphics g) {

g.drawImage(img, 10, 10,

Graphics.LEFT | Graphics.TOP); }

Java Mobile

• Mutable Image:

Khởi tạo đối tượng, yêu cầu chương trình cấp một vùng nhớ với kích thước cho trước của hình ảnh:

Image img = Image.createImage(80,100); Vẽ hình ảnh lên đối tượng :

//lấy đối tượng Graphics tương ứng của đối tượng Image: Graphics g = img.getGraphics();

//dùng đối tượng Graphics vừa lấy vẽ các hình ảnh lên đối tượng Image:

g.fillRoundRect (0, 0, 50, 50, 20, 20); …

Hiển thị hình vừa vẽ lên màn hình: protected void paint (Graphics g) {

g.drawImage(img, 10, 10, Graphics.VCENTER | Graphics.HCENTER);

}

Hình 5.7 Vẽ bằng đối tượng Mutable Image

Khi gọi phương thức vẽ đối tượng Image lên màn hình, ta cũng phải truyền các tham số x, y, anchor như khi vẽ text. Tuy nhiên, các loại anchor của hình ảnh tương

đối khác với text, đó là không sử dụng anchor BASELINE(đường chẩn của ký tự / chuỗi) mà thay vào đó là VCENTER để chỉđiểm giữa theo chiều dọc của hình ảnh

Lớp Graphics: javax.microedition.lcdui.Graphics

Tên anchor Mô tả Vị trí

LEFT lề trái của hình ảnh chiều ngang HCENTER điểm giữa của hình ảnh chiều ngang RIGHT lề phải của hình ảnh chiều ngang TOP điểm cao nhất của hình ảnh chiều dọc (adsbygoogle = window.adsbygoogle || []).push({});

Java Mobile

VCENTER điểm giữa của hình ảnh chiều dọc BOTTOM điểm cao nhất của hình ảnh chiều dọc

Bảng 5.16 Giá trị Image Anchor

Hình 5.8 Các định dạng vị trí trong Graphics 5.2.5. Các phương thức tịnh tiến đối tượng:

Để đơn giản khi biểu diễn sự tịnh tiến của các đối tượng hình ảnh trên màn hình, lớp Graphics cho phép người lập trình vẽ các đối tượng ở vị trí cốđịnh. Khi cần tịnh tiến các đối tượng trên màn hình thì chỉ cần tịnh tiến gốc toạđộ đến vị trí mới, các hình ảnh của đối tượng Graphics sẽ tịnh tiến theo.

Lớp Graphics: javax.microedition.lcdui.Graphics

Phương thức Mô tả

void translate(int x, int y) tịnh tiến điểm gốc (0, 0) của đối tượng Graphics

đến vị trí (x,y)

int getTranslateX() lấy khoảng cách trên trục hoành đã bị tịnh tiến int getTranslateY() lấy khoảng cách trên trục tung đã bị tịnh tiến

Bảng 5.17 Các phương thức tịnh tiến

Khi gọi thực hiện phương thức translate() để tịnh tiến hình ảnh trên màn hình thì chỉ

có gốc tọa độ bị thay đổi vị trí, và cũng chỉ có ý nghĩa trong lần gọi hàm đó. Nếu gọi thực hiện phương thức repaint() mà không gọi translate() lần nữa thì toạđộ gốc sẽ trở về vị trí (0,0) ban đầu.

VD:

Java Mobile

protected void keyPressed(int keyCode) { switch (getGameAction(keyCode)) {

... case DOWN:

if ((translatey + img.getHeight() + 1) > getHeight()) translatey = 0; else translatey ++; break; ... } repaint(); }

protected void paint(Graphics g){ if (im != null){

//xoá màn hình

g.setColor(255, 255, 255);

g.fillRect(0, 0, getWidth(), getHeight()); //tịnh tiến gốc toạđộ

g.translate(translatex, translatey); // luôn vẽở vị trí 0,0

g.drawImage(im, 0, 0, Graphics.LEFT | Graphics.TOP); }

Java Mobile

Một phần của tài liệu Nghiên cứu JM và xây dựng ứng dụng minh họa (Đặng Nguyễn Kim Anh vs Đào Anh Tuấn) - 2 potx (Trang 54 - 58)