Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 30 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
30
Dung lượng
1,57 MB
Nội dung
Học viện cơng nghệ bưu viễn thơng C08CNTT §å häa AWT java Tháng 3/2010 Nội dung: Lớp Graphics Vẽ hình học Vẽ chữ Vẽ ảnh Chế độ vẽ Lớp Color Vùng cắt Các lớp tiện ích khác Lớp Graphics 2D Vẽ hình học Nét vẽ Chế độ vẽ Tơ loang Vẽ ảnh suốt Biến đổi tọa độ Java2D Lớp Graphics Khái quát: Khi muốn vẽ hình dùng đến đối tượng Graphics, đối tượng Graphics cọ phết lên Frame, Canvas hay Applet Muốn vẽ hình thường phải cài đặt phương thức: public void paint(Graphics g){} Phương thức: repaint() dùng để vẽ lại hình ảnh (thực chất repaint() gọi đến phương thức update() sau gọi đến phương thức paint()) Nếu muốn vẽ lại phần ta sử dụng phương thức: repaint ( int x, int y,i nt width, int height ) Lớp Graphics 1.Vẽ hình học: Gồm: Vẽ Vẽ Vẽ Vẽ Vẽ Vẽ hình chữ nhật Elip, vòng tròn đa giác đường thẳng hình chữ nhật tròn góc cung tròn Lớp Graphics 1.Vẽ hình học: X Giới thiệu hệ tọa độ: Vẽ hình chữ nhật: (0,0) (800,0) Màn hình drawRect(int x, int y,int width,int height) fillRect(int x, int y,int width,int height) (0,600) (800,600) Y clearRect(int x, int y,int width,int height) draw (Widt (x,y) h) fill (Height) VD: public void paint (Graphics g) { g drawRect(20, 30,50,50); } Lớp Graphics 1.Vẽ hình học: Vẽ đường thẳng: (x1,y1) drawLine(int x1, int y1, int x2, int y2) Vẽ vòng tròn, elip: drawOval (int x, int y, int width, int height) fillOval (int x, int y, int width, int height) + Đường tròn: width= height (x,y) (Height) draw (Width) fill (x2,y2) Lớp Graphics 1.Vẽ hình học: Vẽ hình chữ nhật tròn góc: drawRoundRect (int x, int y, int width, int height, int arcWidth, int arcHeight) fillRoundRect (int x, int y, int width, int height, int arcWidth, int arcHeight) (arcHeight) (arcWidth) Lớp Graphics 1.Vẽ hình học: Vẽ đa giác: drawPolygon ( int[] x, int[] y, int numberPoint ) drawPolygon (Polygon p) Lớp polygon: - Cung cấp khả tạo Polygon yển chuyển Đa giác xem đối tượng - Có thể thêm đỉnh nhờ phương thức addPoint Polygon pg=new Polygon(); pg.addPoint(2,50); g.drawPolygon(pg); Phương thức contains(int x,int y) để kiểm tra điểm có nắm đa giác không -Phương thức getBounds() cho biết phạm vi tối đa ma đỉnh chiếm giữ - (trả kiểu Rectangle) Lớp Graphics 1.Vẽ hình học: Vẽ cung tròn: drawArc( int x, int y, int width, int height, int startAngle, int arcAngle); fillArc( int x, int y, int width, int height, int startAngle, int arcAngle); (x,y) (width) Fill Arc Draw Arc arcAngle startAngle (height) Lớp Graphics 2.Vẽ chữ: Vẽ mảng ký tự : drawChars ( char[] Data, int Offset, int Length, int x, int y) Data: Mảng ký tự cần vẽ Offset: Ký tự bắt đầu Length: Số ký tự cần vẽ char[] A={ ‘H’ , ‘e’ , ‘l’ , 'l‘ , ‘o’ , ‘!’ }; g.drawChars (A , , A.length , 50 , 50); • Cách khác: drawBytes( byte[] Data, int Offset, int Length, int x, int y) Data: Mảng byte (biểu diễn mã ASCII) VD: byte[] B={ 65, 66, 67, 68, 69 }; // “ A , B , C , D , E ” Lớp Graphics 6.Vùng cắt (Clipping): Đối tượng Graphics cho phép ta cài đặt vùng cắt phương thức clipRect sau: clipRect(int x, int y, int width, int height) VD: public void paint(Graphics g) { g.drawRect(40,50,80,90); g.clipRect(40,50,80,90); g.setColor(Color.blue); g.fillOval(30,40,90,90); } Lớp Graphics 2D Khái quát: Graphics2D chứa tập phong phú hàm phương thức vẽ đồ họa hẳn lớp Graphics Chẳng hạn như: Graphics2D cho phép quy định chiều rộng bút vẽ, kiểu nét vẽ, phương thức xử lý hình, vẽ tô màu loang, cho phép sử dụng Font chữ máy cục bộ, hỗ trợ hệ tọa độ động, số thao tác biến đổi toạ độ Tuy nhiên để trì tính tương thích với Java 1.1, kiểu khai báo đối số phương thức paintComponent Graphics cơng khai đồ thị Vì bạn phải ép kiểu đối số phương thức paintComponent thành Graphics2D trước sử dụng nó: public void paint(Graphics g) { Graphics2D g2=(Graphics2D)g; Lớp Graphics 2D Các tính Graphics2D: Đa dạng màu tô mẫu tô: tô loang (Gradient), tô mẫu ảnh (pattern), tô màu ảnh suốt (Transparent) Sử dụng font đặc thù theo hệ điều hành Thay đổi độ dày nét bút vẽ Các nét vẽ dùng mẫu, cho phép xử lý nét vẽ gấp khúc theo nhiều cách Các phép biến đổi tọa độ Hình vẽ (Shape) đối tượng tự vẽ Lớp Graphics 2D 1.Các dạng hình học Java2D Các lớp đối tượng hình học Java2D (trong gói Line2D.Double //Đường thẳng java.awt.geom): Arc2D.Double //Cung tròn Line2D.Float Arc2D.Float Polygon //Đa giác Area //Vùng QuadCurve2D.Double //Cung góc CubicCurve2D.Double //Khối CubicCurve2D.Float Ellipse2D.Double//Hình tròn, elip Ellipse2D.Float GenrralPath //Vẽ cung tư QuadCurve2D.Float Rectangle2D.Double //Hình chữ nhật Rectangle2D.Float RoundRectangle2D.Double //Hình CN RoundRectangle2D.Float Góc tròn Lớp Graphics 2D 1.Các dạng hình học Java2D (tt) Line2D.Double:Khởi tạo: setLine( int x1, int y1, int x2, int y2 ) Arc2D.Double :Khởi tạo: setArc( x, y, w, h, angStart, angNum, closure) Ellipse2D.Double: Khởi tạo: setFrame( x, y, w, h); VD: public void paint(Graphics g) { Graphics2D g2=(Graphics2D)g; // Ep kieu cho doi tuong Graphics Line2D.Double a=new Line2D.Double(); a.setLine(100,150,150,150); // Khoi tao Line Arc2D.Double b=new Arc2D.Double(); b.setArc(50,50,90,90,20,90,2); // Khoi tao cung tron Ellipse2D.Double c=new Ellipse2D.Double(); c.setFrame(20,20,80,80); // Khoi tao Elip g2.setColor(Color.orange); // Doi mau g2.fill(b); // Ve cung tron g2.draw(a); // Ve Line g2.draw(c); //Xem thu vung cat g2.clip(c); // Cat bang hinh c g2.setColor(Color.magenta);// Doi mau g2.fillRect(10,50,50,50); // Ve hinh CN } Lớp Graphics 2D 1.Các dạng hình học Java2D (tt) Dạng hình học đặc biệt: GenrralPath:Vẽ cung GeneralPath p = new GeneralPath(GeneralPath.WIND_EVEN_ODD); (x3,y3) Curve: p.moveTo(x1,y1); (x2,y2) p.curveTo(x2,y2, x3,y3, x4,y4); Quad: p.moveTo(x1,y1); p.quadTo(x2, y2, x3,y3); (Curve) (x1,y1) QuadCurve2D: Vẽ cung (Tương tự Quad (x2,y2) GenrralPath) (x4,y4) Khởi tạo: public void setCurve(x1, y1, x2, y2, x3, y4) Hoặc: public void setCurve(Point p1, Point p2, Point p3) CubicCurve2D: (Tương tự Curve GenrralPath) (x1,y1) (Quad) (x3,y3) Lớp Graphics 2D 2.Thay đổi nét vẽ: Các phương thức draw đối tượng Graphics có nét vẽ pixel Graphics2D có khả thay đổi độ dày nét vẽ, đồng thời thay đổi kiểu nét vẽ Thay đổi độ dày nét vẽ: Ta dùng phương thức setStroke(Stroke s) : Như ta phải tạo đối tượng có cài đặt giao diện Stroke để truyền, lớp BasicStroke lớp cài giao diện đó: BasicStroke(foat penWidth); Trước: VD: public void paint(Graphics g) { Graphics2D g2=(Graphics2D)g; Sau: g2.setStroke(new BasicStroke(3)); g2.drawLine(30,40,60,90); } Lớp Graphics 2D 2.Thay đổi nét vẽ: Thay đổi kiểu nét vẽ: Các phương thức khởi tạo nét vẽ với kiểu nét vẽ: Ngoài phương thức BasicStroke(foat penWidth) ta số phương thức khởi tạo: BasicStroke(float width, int cap, int join, float miterlimit, float dash[], float dash_phase) capStyle: Kiểu đầu mút nét vẽ (CAP_SQUARE, CAP_BUTT, CAP_ROUND) jonStyle: Kiểu nối (JOIN_MITER, JOIN_BEVEL, JOIN_ROUND) miterlimit: Giới hạn mũ nối dash[] : mảng chứa thông tin đứt gãy: dash_phase: điểm bắt đầu nét VD: 20px liền, 30px đứt, 10px liền, 20px đứt capStyle= float A={20, 30, 10, 20, 40} capStyle= capStyle= jonStyle=0 jonStyle=1 jonStyle=2 Lớp Graphics 2D 3.Tơ màu : • • Graphics2D có lớp phương thức setPaint(Paint x) thay cho setColor() Graphics trước để tơ màu: • Các lớp lớp Paint: + Color: Màu đơn + GradientPaint: Tô loang + TexturePaint: Tô theo mẫu ảnh GraientPaint: Tô loang GradientPaint( x1, y1, Color 1, x2, y2, Color ) public void paint(Graphics g) { Graphics2D g2=(Graphics2D)g; GradientPaint gr=new GradientPaint(100,100,Color.red,150,150,Color.BLUE g2.setPaint(gr); g2.fillOval(50,50,200,200); } Lớp Graphics 2D 3.Tô màu : TexturePaint: Tô theo mẫu ảnh TexturePaint ( BuferedImage a, Rectangle2D b) public void paint(Graphics g) { Graphics2D g2=(Graphics2D)g; Image a=getToolkit().getImage("Warning.png"); • BufferedImage e=new BufferedImage(a.getWidth(this), a.getHeight(this), BufferedImage.TYPE_INT_RGB); Graphics2D g2d=e.createGraphics(); g2d.drawImage(a,0,0,this); Rectangle rt=new Rectangle(); rt.setRect(0,0,a.getWidth(this),a.getHeight(this)) ; TexturePaint gr=new TexturePaint(e,rt); g2.setPaint(gr); Lớp Graphics 2D 4.Vẽ ảnh suốt: • Để vẽ ảnh suốt ta dùng phương thức setComposite() lớp Graphics2D: • Dùng đối tượng AlphaComposite để truyền vào phương thức setComposite() public void paint(Graphics g) { Graphics2D g2=(Graphics2D)g; g2.setColor(Color.red); g2.fillRect(50,50,60,60); g2.setColor(Color.blue); g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, (float)0.3)); g2.fillOval(60,60,80,80); } Lớp Graphics 2D 5.Biến đổi tọa độ: • • Java2D cho phép dịch, quay, co giãn, bóp méo hình dễ dàng: Hàm biến đổi tọa độ Graphics2D • translate(int x,int y): Di chuyển gốc tọa độ đến (x,y) • rotate(double a,int x, int y): Quay hệ tọa độ a, di chuyển tâm quay đến tọa độ (x,y) • • scale(sx,sy): Phóng to, thu nhỏ với tỷ lệ sx,sy shear(float shx, float shy): Bóp méo hình theo chiều ngang, dọc public void paint(Graphics g) { Graphics2D g2=(Graphics2D)g; g2.shear( (float) 1.0, (float) 0.0); g2.setColor(Color.red); g2.fillRect(50,50,60,60); } Lời kết: • Ngồi khả đồ họa Java nêu Slide, Java có khả xử lý ảnh, tạo hiêu ứng chữ, mở Video… nâng cao Java3D, đề tài phức tạp đồ họa Thời gian có hạn nên nghiên cứu hết, mong góp ý thầy bạn ! Phụ lục: *** Tài liệu tham khảo *** • Java Tập1 – Nhà xuất lao động • OReilly Java Cookbook 2nd Edition • Thinking In Java *** Nhóm thực *** Nhóm 8: Nguyễn Đình Hùng Đỗ Duy Bình Phạm Văn Hồi Phạm Văn Lực Đỗ Văn Hoàn Trần Văn Kiên Đỗ Thành Nam Trần Thị Hiền Cảm ơn quan tâm theo dõi thầy bạn ! THE END Tháng 3/2010 ... Lớp Graphics 2D 1.Các dạng hình học Java2 D Các lớp đối tượng hình học Java2 D (trong gói Line2D.Double //Đường thẳng java .awt. geom): Arc2D.Double //Cung tròn Line2D.Float Arc2D.Float ... QuadCurve2D.Double //Cung góc CubicCurve2D.Double //Khối CubicCurve2D.Float Ellipse2D.Double//Hình tròn, elip Ellipse2D.Float GenrralPath //Vẽ cung tư QuadCurve2D.Float Rectangle2D.Double... //Hình chữ nhật Rectangle2D.Float RoundRectangle2D.Double //Hình CN RoundRectangle2D.Float Góc tròn Lớp Graphics 2D 1.Các dạng hình học Java2 D (tt) Line2D.Double:Khởi tạo: setLine( int