Lập trình đồ họa
Chia sẻ bởi Nguyễn Việt Vương |
Ngày 29/04/2019 |
90
Chia sẻ tài liệu: Lập trình đồ họa thuộc Bài giảng khác
Nội dung tài liệu:
Chương 7- Lập trình đồ họa
Mục tiêu
Đến cuối chương bạn có thể
Hiểu biết về lớp Font, lớp FontMetrics
Hiểu biết về lớp Color.
Biết cách vẽ hình ảnh trên GUI. với đối tượng thuộc lớp Graphics, Graphics2D
Nội dung
7.1- Ôn tập
7.2- Các vấn đề cơ bản về vẽ.
7.3- Điều khiển mầu sắc.
7.4- Điều khiển Font.
7.5- Đồ họa với lớp Graphics.
7.6- Paint mode.
7.7- Đồ họa với lớp Graphics2D.
7.8- File ảnh.
7.9- Tóm tắt.
7.10- Chương trình vẽ bằng chuột.
7.1- Ôn tập
Event : Tín hiệu nhận biết có sự thay đổi trạng thái.
Nguồn phát sinh event: Hệ thống, user, event khác.
Có 2 mức sự kiện : low-level events (không do user kích họat), semantic-level events (event do user kích hoạt)
Có 4 loại semantic-level events: trong gói java.awt.event: ActionEvent, AdjustmentEvent, ItemEvent, TextEvent.
Ôn tập...
Event Source: Đối tượng kích hoạt 1 sự kiện.
Event là đối tượng mô tả có sự thay đổi trạng thái của đối tượng nguồn.
Event handler: Các method xử lý tình huống dựa trên loại Event object.
Khi 1 event xẩy ra, event source sẽ gọi các method tương ứng được định nghĩa trong đối tượng listener kết hợp với event source.
Quản lý 1 event trong ứng dụng là tạo 1 đối tượng listener phù hợp với event source, viết code event handler, kết hợp event source với listener.
7.2- Các vấn đề cơ bản về vẽ
Điều khiển mầu sắc.
Chọn Font
Thao tác vẽ : Vẽ chuỗi, vẽ hình, tô mầu.
Chế độ đồ họa Graphic mode.
Xuất file ảnh.
7.3- Điều khiển mầu sắc
Tại 1 thời điểm. có 1 mầu nền (background color, mặc định là white) hiện hành và 1 mầu vẽ hiện hành mặc định là black.
Thao tác với mầu nền và mầu vẽ của Frame:
setBackground(aColor); getBackground();
setForeground(aColor); getForeground();
Ấn định mầu vẽ g.setColor (aColor); // g:graphic object
Chỉ định mầu bằng các hằng mầu sắc: Khai báo sẵn trong lớp Color Color.black , … Các hằng khác : white, gray , lightGray, darkGray, red, pink, orange, yellow , green, magenta, cyan , blue.
Điều khiển mầu sắc (tt)
1 mầu tự chọn được ấn định bằng bộ 3 (Red,Green,Blue) thông qua constructor của lớp Color :
Color class
public Color(float RedVal, float GreenVal, float BlueVal)
public Color(int RedVal, int GreenVal, int BlueVal) // 0..255
Truy xuất trị 1 mầu hoặc thành phần của 1 mầu
getRed(), getGreen(), getBlue(), getRGB()
Thí dụ về ấn định mầu hiện hành:
Color c = new Color( 255,130,60);
g.setColor(c) ; // g: graphic object
…
g.setColor(new Color(100,0,200));
7.4- Điều khiển Font
Font = Kiểu chữ , mô tả nét vẽ (glyphs) của ký tự.
Có ký tự 1 nét (a), 2 nét (á)
3 thuộc tính của font: Font name, font style, font size.
Lớp Font mô tả cho 1 font.
Physical Fonts: Font thực, là các font TrueType hay PostScript Type 1.
Logical Font: chia làm 5 nhóm: Serif, SansSerif, Monospaced, Dialog, và DialogInput
Label, TextField, ... chỉ sử dụng Logical Font
Font....
Có thể lấy tập font trong máy bằng 1 đối tượng thuộc lớp GraphicEnvironment.
Lấy fonts hệ thống thông qua đối tượng GraphicsEnvironment
Thí dụ: Lấy fonts hệ thống đưa vào choice cFonts
GraphicsEnvironment ge;
ge=GraphicsEnvironment.getLocalGraphicsEnvironment();
Font f[]= ge.getAllFonts();
for (int i=0;i
SystemFonts.java
Font (tt)
Lớp FontMetric cho ta kích thước font:
String getName(): tên font
int getHeight() : chiều cao
int getAscend()
int getDescent()
int getHeight()
int getLeading()
Tham khảo thêm trong Document của lớp này để biết thêm các methods
Thí dụ 2- Truy xuất thuộc tính kích thước font
Khoảng hở đến ký tự kế tiếp
FontMetricDemo.java
7.5- Đồ họa với lớp Graphics.
Graphic: Hình ảnh do ta vẽ hoặc file ảnh.
Một GUI thiếu hình ảnh là 1 GUI thiếu sinh khí (dull).
Trong gói AWT cung cấp đối tượng Graphics cho ta vẽ và lớp Image cho ta thao tác với file ảnh.
lớp Graphics (tt)
Lớp Graphics có các phương thức vẽ hình cơ bản, tô mầu: Hình Oval, Ractangle,Square, Circle, Lines, Text, xuất file ảnh…
lớp Graphics (tt)
Muốn vẽ : Lấy đối tượng đồ họa kết hợp của Frame (Panel) bằng hành vi getGraphics() hoặc hiện thực 1 trong các phương thức sau:
(1) Phương thức paint(Graphics g) được gọi ngay khi nạp class và được gọi bởi phương thức update(..)
(2) Phương thức repaint() được gọi khi cần vẽ lại.
(3) Phương thức update(Graphics g) được gọi tự động bởi phương thức repaint(). Sẽ xó các đối tượng đồ họa cũ rồi gọi lại paint(g)
Muốn vẽ thêm mà không xóa các hình ảnh cũ, cần override phưong thức update như sau:
public void update (Graphics g) { paint (g); }
Slide sau cho thấy thí dụ về cách viết chương trình đồ họa
7.5.1- Vẽ ký tự với font và mầu hiện hành
void drawString(String str, int x, int y)
vẽ chuỗi bắt đầu tại toạ độ (x,y)
void drawChars(char[] data, int offset, int length, int x, int y)
vẽ length ký tự từ vị trí offset trong mảng ký tự bắt đầu tại toạ độ (x,y)
void drawBytes(byte[] data, int offset, int length, int x, int y)
Vẽ ký tự có mã ký tự trong mảng data, từ vị trí offset, length ký tự bắt đầu tại toạ độ (x,y)
(Xem thí dụ 3)
Draw1.java
7.5.2- Vẽ hình ảnh – lớp Graphics
abstract void drawLine(int x1, int y1, int x2, int y2)
abstract void drawOval(int x, int y, int width, int height)
abstract void drawPolygon(int[] xPoints, int[] yPoints, int nPoints)
void drawPolygon(Polygon p)
abstract void drawPolyline(int[] xPoints, int[] yPoints, int nPoints)
void drawRect(int x, int y, int width, int height)
abstract void drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight)
7.5.3-Vẽ + tô mầu hình ảnh
void fill3DRect (int left, int top, int width, int height, boolean raised)
abstract void fillArc (int left, int top, int width, int height, int startAngle, int arcAngle)
abstract void fillOval (int left, int top, int width, int height)
abstract void fillPolygon (int[] xPoints, int[] yPoints, int nPoints)
void fillPolygon (Polygon p)
abstract void fillRect (int left, int top, int width, int height)
abstract void fillRoundRect (int left, int top, int width, int height, int arcWidth, int arcHeight)
Minh họa
Vẽ trên Frame – Draw2.java
Vẽ + Tô mầu- Draw3.java
Vẽ biểu đồ khối, biểu đồ quạt- BieuDo.java
Vẽ, Tô mầu đa giác - PolygonDemo.java
7.6- Paint mode
2 chế độ đồ họa:
Overwrite mode: Nội dung mới xóa nội dung cũ.
XOR mode : Nội dung mới không xóa nội dung cũ, cả 2 nội dung cùng khả kiến
g.setXORMode(Color.cyan);
Thí dụ: Xem Draw4.java trong tài liệu minh họa.
Xor-mode- Draw4.java
7.7- Đồ họa với Graphics2D
Lớp Graphics cung cấp các methods đồ họa nhưng không xây dựng các lớp ảnh.
Lớp Graphics2D kế thừa lớp Graphics nhưng có xây dựng các lớp mô tả ảnh và các phép biến hình …, có sử dụng hệ tọa độ thực
Đồ họa với Graphics2D (tt)
Trong gói geom (geometry- hình học)
có interface Shape và hiện thực của các lớp Polygon, RectangularShape, Rectangle, Line2D, CubicCurve2D, Area, GeneralPath, QuadCurve2D
Đồ họa với Graphics2D (tt)
Có lớp …Double, …Float cho phép mô tả hình trong hệ tọa độ thực.
Đồ họa với Graphics2D (tt)
Lớp AffineTransform mô tả cho các phép biến hình phẳng
Graph2D1.java
7.8- Thao tác với file ảnh
Ảnh đơn giản là các hình vẽ.
Ảnh phức tạp là các file ảnh
Để xuất ảnh từ file, cần dùng đối tượng Toolkit (đối tượng truy xuất một số file ảnh) và Image
Toolkit có thể truy xuất file .GIF, .JPG, .JPEG
Chỉ định file ảnh cục bộ bằng tên file.
Chỉ định file trên mạng bằng địa chỉ URL.
Thao tác với file ảnh (tt)
Sử dụng Toolkit để truy xuất 1 file ảnh cục bộ:
String FileName= “img1.jpg";
Image img;
img= Toolkit.getDefaultToolkit().getImage (FileName);
Sử dụng Toolkit để truy xuất 1 file ảnh từ URL:
URL Addr = new URL ( http://www.xyz.com/img1.gif);
Image img ;
img= Toolkit.getDefaultToolkit().getImage (Addr);
Xuất file ảnh (tt)
Lớp Graphics, Graphic2D có các methods drawImage , 2 method thông dụng:
public abstract boolean drawImage
(Image img, int x,int y, ImageObserver observer)
abstract boolean drawImage (Image img, int x, int y, int width, int height, ImageObserver observer)
(x,y) vị trí trên trái của vùng xuất ảnh
observer: Đối tượng quan sát qúa trình nạp ảnh. Nếu là null, chỉ thấy ảnh sau khi thay đổi kích thước cửa số. Nên cho là container chư ảnh(this) để thấy ngay ảnh.
( Thí dụ: Xem tài liệu minh họa)
ShowImg1.java
ShowImg2.java
7.9- Tóm tắt
The Graphics, Graphics2D classes are used to draw objects like text, lines, rectangle, ovals , arcs or show an image on the screen.
The methods drawXXX of these class will draw graphic on the screen.
To make an Image object associating to an image file, use java.awt.Toolkit class
The Font class manages the font of the characters that will be drawn on the screen.
The FontMetrics class is used to obtain information about a special font.
The Color class is used to manage color of objects on the screen.
7.10- Chương trình vẽ bằng chuột
DrawWithMouse.java
Xin cám ơn
Mục tiêu
Đến cuối chương bạn có thể
Hiểu biết về lớp Font, lớp FontMetrics
Hiểu biết về lớp Color.
Biết cách vẽ hình ảnh trên GUI. với đối tượng thuộc lớp Graphics, Graphics2D
Nội dung
7.1- Ôn tập
7.2- Các vấn đề cơ bản về vẽ.
7.3- Điều khiển mầu sắc.
7.4- Điều khiển Font.
7.5- Đồ họa với lớp Graphics.
7.6- Paint mode.
7.7- Đồ họa với lớp Graphics2D.
7.8- File ảnh.
7.9- Tóm tắt.
7.10- Chương trình vẽ bằng chuột.
7.1- Ôn tập
Event : Tín hiệu nhận biết có sự thay đổi trạng thái.
Nguồn phát sinh event: Hệ thống, user, event khác.
Có 2 mức sự kiện : low-level events (không do user kích họat), semantic-level events (event do user kích hoạt)
Có 4 loại semantic-level events: trong gói java.awt.event: ActionEvent, AdjustmentEvent, ItemEvent, TextEvent.
Ôn tập...
Event Source: Đối tượng kích hoạt 1 sự kiện.
Event là đối tượng mô tả có sự thay đổi trạng thái của đối tượng nguồn.
Event handler: Các method xử lý tình huống dựa trên loại Event object.
Khi 1 event xẩy ra, event source sẽ gọi các method tương ứng được định nghĩa trong đối tượng listener kết hợp với event source.
Quản lý 1 event trong ứng dụng là tạo 1 đối tượng listener phù hợp với event source, viết code event handler, kết hợp event source với listener.
7.2- Các vấn đề cơ bản về vẽ
Điều khiển mầu sắc.
Chọn Font
Thao tác vẽ : Vẽ chuỗi, vẽ hình, tô mầu.
Chế độ đồ họa Graphic mode.
Xuất file ảnh.
7.3- Điều khiển mầu sắc
Tại 1 thời điểm. có 1 mầu nền (background color, mặc định là white) hiện hành và 1 mầu vẽ hiện hành mặc định là black.
Thao tác với mầu nền và mầu vẽ của Frame:
setBackground(aColor); getBackground();
setForeground(aColor); getForeground();
Ấn định mầu vẽ g.setColor (aColor); // g:graphic object
Chỉ định mầu bằng các hằng mầu sắc: Khai báo sẵn trong lớp Color Color.black , … Các hằng khác : white, gray , lightGray, darkGray, red, pink, orange, yellow , green, magenta, cyan , blue.
Điều khiển mầu sắc (tt)
1 mầu tự chọn được ấn định bằng bộ 3 (Red,Green,Blue) thông qua constructor của lớp Color :
Color class
public Color(float RedVal, float GreenVal, float BlueVal)
public Color(int RedVal, int GreenVal, int BlueVal) // 0..255
Truy xuất trị 1 mầu hoặc thành phần của 1 mầu
getRed(), getGreen(), getBlue(), getRGB()
Thí dụ về ấn định mầu hiện hành:
Color c = new Color( 255,130,60);
g.setColor(c) ; // g: graphic object
…
g.setColor(new Color(100,0,200));
7.4- Điều khiển Font
Font = Kiểu chữ , mô tả nét vẽ (glyphs) của ký tự.
Có ký tự 1 nét (a), 2 nét (á)
3 thuộc tính của font: Font name, font style, font size.
Lớp Font mô tả cho 1 font.
Physical Fonts: Font thực, là các font TrueType hay PostScript Type 1.
Logical Font: chia làm 5 nhóm: Serif, SansSerif, Monospaced, Dialog, và DialogInput
Label, TextField, ... chỉ sử dụng Logical Font
Font....
Có thể lấy tập font trong máy bằng 1 đối tượng thuộc lớp GraphicEnvironment.
Lấy fonts hệ thống thông qua đối tượng GraphicsEnvironment
Thí dụ: Lấy fonts hệ thống đưa vào choice cFonts
GraphicsEnvironment ge;
ge=GraphicsEnvironment.getLocalGraphicsEnvironment();
Font f[]= ge.getAllFonts();
for (int i=0;i
SystemFonts.java
Font (tt)
Lớp FontMetric cho ta kích thước font:
String getName(): tên font
int getHeight() : chiều cao
int getAscend()
int getDescent()
int getHeight()
int getLeading()
Tham khảo thêm trong Document của lớp này để biết thêm các methods
Thí dụ 2- Truy xuất thuộc tính kích thước font
Khoảng hở đến ký tự kế tiếp
FontMetricDemo.java
7.5- Đồ họa với lớp Graphics.
Graphic: Hình ảnh do ta vẽ hoặc file ảnh.
Một GUI thiếu hình ảnh là 1 GUI thiếu sinh khí (dull).
Trong gói AWT cung cấp đối tượng Graphics cho ta vẽ và lớp Image cho ta thao tác với file ảnh.
lớp Graphics (tt)
Lớp Graphics có các phương thức vẽ hình cơ bản, tô mầu: Hình Oval, Ractangle,Square, Circle, Lines, Text, xuất file ảnh…
lớp Graphics (tt)
Muốn vẽ : Lấy đối tượng đồ họa kết hợp của Frame (Panel) bằng hành vi getGraphics() hoặc hiện thực 1 trong các phương thức sau:
(1) Phương thức paint(Graphics g) được gọi ngay khi nạp class và được gọi bởi phương thức update(..)
(2) Phương thức repaint() được gọi khi cần vẽ lại.
(3) Phương thức update(Graphics g) được gọi tự động bởi phương thức repaint(). Sẽ xó các đối tượng đồ họa cũ rồi gọi lại paint(g)
Muốn vẽ thêm mà không xóa các hình ảnh cũ, cần override phưong thức update như sau:
public void update (Graphics g) { paint (g); }
Slide sau cho thấy thí dụ về cách viết chương trình đồ họa
7.5.1- Vẽ ký tự với font và mầu hiện hành
void drawString(String str, int x, int y)
vẽ chuỗi bắt đầu tại toạ độ (x,y)
void drawChars(char[] data, int offset, int length, int x, int y)
vẽ length ký tự từ vị trí offset trong mảng ký tự bắt đầu tại toạ độ (x,y)
void drawBytes(byte[] data, int offset, int length, int x, int y)
Vẽ ký tự có mã ký tự trong mảng data, từ vị trí offset, length ký tự bắt đầu tại toạ độ (x,y)
(Xem thí dụ 3)
Draw1.java
7.5.2- Vẽ hình ảnh – lớp Graphics
abstract void drawLine(int x1, int y1, int x2, int y2)
abstract void drawOval(int x, int y, int width, int height)
abstract void drawPolygon(int[] xPoints, int[] yPoints, int nPoints)
void drawPolygon(Polygon p)
abstract void drawPolyline(int[] xPoints, int[] yPoints, int nPoints)
void drawRect(int x, int y, int width, int height)
abstract void drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight)
7.5.3-Vẽ + tô mầu hình ảnh
void fill3DRect (int left, int top, int width, int height, boolean raised)
abstract void fillArc (int left, int top, int width, int height, int startAngle, int arcAngle)
abstract void fillOval (int left, int top, int width, int height)
abstract void fillPolygon (int[] xPoints, int[] yPoints, int nPoints)
void fillPolygon (Polygon p)
abstract void fillRect (int left, int top, int width, int height)
abstract void fillRoundRect (int left, int top, int width, int height, int arcWidth, int arcHeight)
Minh họa
Vẽ trên Frame – Draw2.java
Vẽ + Tô mầu- Draw3.java
Vẽ biểu đồ khối, biểu đồ quạt- BieuDo.java
Vẽ, Tô mầu đa giác - PolygonDemo.java
7.6- Paint mode
2 chế độ đồ họa:
Overwrite mode: Nội dung mới xóa nội dung cũ.
XOR mode : Nội dung mới không xóa nội dung cũ, cả 2 nội dung cùng khả kiến
g.setXORMode(Color.cyan);
Thí dụ: Xem Draw4.java trong tài liệu minh họa.
Xor-mode- Draw4.java
7.7- Đồ họa với Graphics2D
Lớp Graphics cung cấp các methods đồ họa nhưng không xây dựng các lớp ảnh.
Lớp Graphics2D kế thừa lớp Graphics nhưng có xây dựng các lớp mô tả ảnh và các phép biến hình …, có sử dụng hệ tọa độ thực
Đồ họa với Graphics2D (tt)
Trong gói geom (geometry- hình học)
có interface Shape và hiện thực của các lớp Polygon, RectangularShape, Rectangle, Line2D, CubicCurve2D, Area, GeneralPath, QuadCurve2D
Đồ họa với Graphics2D (tt)
Có lớp …Double, …Float cho phép mô tả hình trong hệ tọa độ thực.
Đồ họa với Graphics2D (tt)
Lớp AffineTransform mô tả cho các phép biến hình phẳng
Graph2D1.java
7.8- Thao tác với file ảnh
Ảnh đơn giản là các hình vẽ.
Ảnh phức tạp là các file ảnh
Để xuất ảnh từ file, cần dùng đối tượng Toolkit (đối tượng truy xuất một số file ảnh) và Image
Toolkit có thể truy xuất file .GIF, .JPG, .JPEG
Chỉ định file ảnh cục bộ bằng tên file.
Chỉ định file trên mạng bằng địa chỉ URL.
Thao tác với file ảnh (tt)
Sử dụng Toolkit để truy xuất 1 file ảnh cục bộ:
String FileName= “img1.jpg";
Image img;
img= Toolkit.getDefaultToolkit().getImage (FileName);
Sử dụng Toolkit để truy xuất 1 file ảnh từ URL:
URL Addr = new URL ( http://www.xyz.com/img1.gif);
Image img ;
img= Toolkit.getDefaultToolkit().getImage (Addr);
Xuất file ảnh (tt)
Lớp Graphics, Graphic2D có các methods drawImage , 2 method thông dụng:
public abstract boolean drawImage
(Image img, int x,int y, ImageObserver observer)
abstract boolean drawImage (Image img, int x, int y, int width, int height, ImageObserver observer)
(x,y) vị trí trên trái của vùng xuất ảnh
observer: Đối tượng quan sát qúa trình nạp ảnh. Nếu là null, chỉ thấy ảnh sau khi thay đổi kích thước cửa số. Nên cho là container chư ảnh(this) để thấy ngay ảnh.
( Thí dụ: Xem tài liệu minh họa)
ShowImg1.java
ShowImg2.java
7.9- Tóm tắt
The Graphics, Graphics2D classes are used to draw objects like text, lines, rectangle, ovals , arcs or show an image on the screen.
The methods drawXXX of these class will draw graphic on the screen.
To make an Image object associating to an image file, use java.awt.Toolkit class
The Font class manages the font of the characters that will be drawn on the screen.
The FontMetrics class is used to obtain information about a special font.
The Color class is used to manage color of objects on the screen.
7.10- Chương trình vẽ bằng chuột
DrawWithMouse.java
Xin cám ơn
* Một số tài liệu cũ có thể bị lỗi font khi hiển thị do dùng bộ mã không phải Unikey ...
Người chia sẻ: Nguyễn Việt Vương
Dung lượng: |
Lượt tài: 5
Loại file:
Nguồn : Chưa rõ
(Tài liệu chưa được thẩm định)