Modul Pelatihan java 2D Java 2D

Asep Komarudin

Pemprograman grafis digunakan dalambanyak hal misalkan untuk memperoleh tampilan yang indah aplikasi simulasi, apilikasi animasi, aplikasi pengolahan citra sampai visi komputer.Dibawah ini akan dijelaskan sedikit mengenai idang grafis dalam java yang diharapkan menjadi bekal awal untuk memehami berbagai topik seputar garfis dalam java yang begitu luas. Grafis vektor Terdapat dua grafis yang berbeda diantaranya yaitu vektor dan raster grafis.grafis raster mewakili gambar sebagai kumppulan pixcel.grafis vektor adalah penggunaan geometris primitif seperti titik garis kurva atau polygon untuk mewakili gambar.primitif disini menggunakan persamaan matematika.Kedua jenis grafis diatas mempunyai kelebihan dan kekeurangan, kekurangan dari grafik vektor adalah: ukuran kecil kemampuan untuk zoom tanpa batas Bergerak, scaling, mengisi atau berputar tidak menurunkan kualitas gambar java 2D api menyediakan banyak alat untuk bekerja dengan vektor atau raster grafis. Java 2D API Java 2D APi digunakan untuk menggambar grafik dua dimensi menggunakan bahasa pemprograman java. kemampuan yang dimiliki Java 2D API • Sebuah model yang seragam untuk perangkat render tampilan dan printer • Berbagai geometris primitif • Hit deteksi pada bentuk, text dan gambar • sebuah model composite • peningkatan dukungan warna • mencetak dokumen • Kontrol kualitas rendering java 2D API meningkatkan kulitas grafis, text dan kemampuan pencitraan windowing toolkit abstract (AWT) .AWT adalah toolkit asli untuk membuat user interface dan grafis di java.Untuk tujuan kompatibilitas, java 2D secara teknis adalah superset dari toolkit AWT. Java 2D adalah teknologi yang kuat.Hal ini dapat dibuat untuk antarmuka pengguna yangkaya game,animasi, aplikasi multimedia atau berbagai efek khusus. Contoh program sederhana: package asep.java2D.sekeletonProgram; import java.awt.Graphics; import java.awt.Graphics2D; import javax.swing.JFrame; import javax.swing.JPanel; /** aasseepp@gmail.com 1

Modul Pelatihan java 2D * * @author asep */ public class Sekeleton2D extends JPanel{ @Override public void paint(Graphics g) { Graphics2D gd=(Graphics2D) g; gd.drawString("asep Conth 2D", 50, 50); } /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here Sekeleton2D sd=new Sekeleton2D(); JFrame frame=new JFrame("Contoh grafik 2D"); frame.add(sd); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(300, 250); frame.setLocationRelativeTo(null); frame.setVisible(true); } } Keluarannya adalah:

Asep Komarudin

Penjelasan Program: @Override public void paint(Graphics g) {

aasseepp@gmail.com

2

Modul Pelatihan java 2D //kode program lainnya

Asep Komarudin

} Semua gambar dilakuakn di pain() metode caranya kita mengoperide metode pain Graphics2D gd=(Graphics2D) g; Kelas Graphics2D adalah kelas dasar untuk rendering grafis di java 2D.Ini merupakan perangkat yang biasa digunakan.ini memperluas objek garafis terdahulu.Pendeklarasian ini diperlukan untuk mendapatkan akses kesemua oprasi. gd.drawString("asep Conth 2D", 50, 50); Disini kita menggambar string pada panel dengan jarak dari sampingkiri 50 dan atas 50. dasar Pemprograman Grafis Salah satu cara untuk membuat aplikasi grafis dengan java adalah dengan membuat kelas turunan dari kelas canvas.Dalam kelas inilah kita meletakan gambar dan animasi, dan membentuk sebuah objek untuk mengakses gambar yangkita buat. Contohnya : package asep.java2D.sekeletonProgram; import java.awt.BorderLayout; import java.awt.Canvas; import javax.swing.JFrame; /** * * @author asep */ public class ContohCanvas extends Canvas { @Override public void paint(Graphics g) { } } class Menggambar extends JFrame{ ContohCanvas canvas=new ContohCanvas(); public Menggambar() { super("aplikasi grafis"); setLocation(100, 100); setSize(250, 150); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } void componenVisual(){ getContentPane().setLayout(new BorderLayout()); getContentPane().add(canvas,BorderLayout.CENTER); setVisible(true); } /** aasseepp@gmail.com 3

Modul Pelatihan java 2D * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here Menggambar m=new Menggambar(); m.componenVisual(); } } Keluarannya adalah:

Asep Komarudin

Penjelasan program: public class ContohCanvas extends Canvas { @Override public void paint(Graphics g) { } } Sintak ini merupakan kelas tempat menggambar berbagai objek gambar .Class inilah yang kita gunakan untk meletakan gambar-gambar yang kita bangundengan kode tertentu.Kode tersebut diletakan pada metode paint.pada metode pain() diatas tidak terdapat baris kode sehingga output yang keluar adalah frame kosong tanpa gambar apapun. class Menggambar extends JFrame{ ContohCanvas canvas=new ContohCanvas(); ...................... ........................ } Class Menggambar adalah adalah program grafis kita pada kelas ini kita membentuk objek dengan mengunakan kelas ContohCanvas dengan nama objek cnvas. getContentPane().setLayout(new BorderLayout()); getContentPane().add(canvas,BorderLayout.CENTER); Layout diataur mengunakan borderlayout dan objek diletakan pada salahsatu diantara lima posisi yang ada. Berikut adalah contoh kita memasukan berbagai objek gambar kedlah canvas

aasseepp@gmail.com

4

Modul Pelatihan java 2D package asep.java2D.sekeletonProgram; import java.awt.BorderLayout; import java.awt.Canvas; import java.awt.Color; import java.awt.Graphics; import javax.swing.JFrame; /** * * @author asep */ public class ContohCanvas extends Canvas { @Override public void paint(Graphics g) { g.setColor(Color.RED); g.drawLine(10, 10, 120, 10); g.setColor(Color.BLUE); g.drawRect(10, 20, 100, 50); g.setColor(Color.yellow); g.drawOval(120, 20, 50, 50); g.drawString("asep", 100, 100); setBackground(Color.CYAN); } } class Menggambar extends JFrame{ ContohCanvas canvas=new ContohCanvas(); public Menggambar() { super("aplikasi grafis"); setLocation(100, 100); setSize(250, 150); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } void componenVisual(){ getContentPane().setLayout(new BorderLayout()); getContentPane().add(canvas,BorderLayout.CENTER); setVisible(true); } /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here aasseepp@gmail.com 5

Asep Komarudin

Modul Pelatihan java 2D Menggambar m=new Menggambar(); m.componenVisual(); } }

Asep Komarudin

Pada bagian kode yang berwarna merah adalah perubahan dari kode yang dibuat sebelumnya diatas. Penjelasan dari program ini public class ContohCanvas extends Canvas { @Override public void paint(Graphics g) { g.setColor(Color.RED); g.drawLine(10, 10, 120, 10); g.setColor(Color.BLUE); g.drawRect(10, 20, 100, 50); g.setColor(Color.yellow); g.drawOval(120, 20, 50, 50); g.drawString("asep", 100, 100); setBackground(Color.CYAN); } } g.setColor(Color.RED); Digunakan untuk mengatur warna dari objek gambar g.drawLine(10, 10, 120, 10); Digunakan untuk menggambar objrk garis ,argumen pertama dan kedua menunjukan ordinat titik awal argumen ke tiga dan ke empat menunjukan koordinat titik akhir. g.drawRect(10, 20, 100, 50); Digunakan untuk menggambar bentuk segi empat argumen pertama dan kedua menunjukan ujung dari kiri atas objek ,argumrnt tiga dan empat menunjukan ujung kanan bawah dari objek persegi. g.drawOval(120, 20, 50, 50); Digunakan untuk mengggambar bentuk lingkaran, argument pertama dan kedua merupakan koordinat titik pusat ,argumrnt ke tiga jarak horizontal dan argument ke empat jarak vertikal. g.drawString("asep", 100, 100); aasseepp@gmail.com 6

Modul Pelatihan java 2D

Asep Komarudin

Digunakan untuk menggambar bentuk string , argument pertama merupakan string yang akan ditampilkan argument pertama dan kedua menunjukan posisi dari tulisan. BASIC DRAWING 1. Points Grafis paling sederhana dan primitif adalah titik.Program ini menunjukan titik pada layar.Sebenarnya tidak ada metode untuk menggambar titik pada java 2D.Untuk menggambar titik saya mengunakan drawLine() metode. Contoh: package asep.java2D.Basik; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Insets; import java.util.Random; import javax.swing.JFrame; import javax.swing.JPanel; /** * * @author asep */ public class MengambarTitk extends JPanel{ @Override protected void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D gd=(Graphics2D) g; gd.setColor(Color.blue); Dimension size=getSize(); Insets insets=getInsets(); int w=size.width-insets.left-insets.right; int h=size.height-insets.top-insets.bottom; Random r=new Random(); for(int i=0;i<1000;i++){ int x=Math.abs(r.nextInt())%w; int y=Math.abs(r.nextInt())%h; gd.drawLine(x, y, x, y); } } aasseepp@gmail.com 7

Modul Pelatihan java 2D

Asep Komarudin

/** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here JFrame frame=new JFrame("contoh titik"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add(new MengambarTitk()); frame.setSize(400, 300); frame.setLocationRelativeTo(null); frame.setVisible(true); } } Keluarannya adalh:

Pada program diatas kita sulit mengamati titik pada panel .Dalam contoh diatas kita menggambar 1000 titik baru di panel Penjelasan program: gd.setColor(Color.blue); merubah warna titik menjadi warna biru Dimension size=getSize(); Insets insets=getInsets(); Ukuran layar yang terdiri dari pembatas dan title tidak di lakukan pengambaran. int w=size.width-insets.left-insets.right; int h=size.height-insets.top-insets.bottom; Digunakan untuk menghitung area untuk melakukan penggambaran titik.

aasseepp@gmail.com

8

Modul Pelatihan java 2D

Asep Komarudin

Random r=new Random(); int x=Math.abs(r.nextInt())%w; int y=Math.abs(r.nextInt())%h; Kita mengunakan nomor acak untuk berbagai penempatan yang kita hitung diatas. gd.drawLine(x, y, x, y); Disini kita melakukan penggambaran titik seperti yang telah dikatakan sebelumnya ,menggunakan drawLine() metode .Disini mengunakan titik yang sama duakali. 2. Garis dibawah ini di berikan contoh program melakukan penggambaran garis. package asep.java2D.Basik; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JFrame; import javax.swing.JPanel; /** * * @author asep */ public class MengganbarGaris extends JPanel{ int coordinat [][]; int count; public MengganbarGaris() { coordinat=new int [100][2]; count=0; addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent e) { if(e.getButton()==e.BUTTON1){ int x=e.getX(); int y=e.getY(); coordinat [count][0]=x; coordinat [count][1]=y; count++; } if(e.getButton()==e.BUTTON3){ drawline(); count=0; } } aasseepp@gmail.com 9

Modul Pelatihan java 2D

Asep Komarudin

}); } public void drawline(){ Graphics g=this.getGraphics(); Graphics2D gd=(Graphics2D) g; int w=getWidth(); int h=getHeight(); RenderingHints rh=new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); rh.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); gd.setRenderingHints(rh); gd.clearRect(0, 0, w, h); for(int i=0;i<count-1;i++){ for(int j=0;j<count-1;j++){ gd.drawLine(coordinat [i][0], coordinat [i][1], coordinat [j][0], coordinat [j][1]); } } } /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here MengganbarGaris mg=new MengganbarGaris(); JFrame frame=new JFrame("menggambar garis"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add(mg); frame.setSize(300, 200); frame.setLocationRelativeTo(null); frame.setVisible(true); } } Pada saat pertama dijlankan:

aasseepp@gmail.com

10

Modul Pelatihan java 2D

Asep Komarudin

lakukan beberapa klik pada panel dengan tombol kiri mouse.Setiap titik yang dilakukan proses klik akan terhubung dengan titik lainnya.

3. Basik Stroke Kelas Basik Stroke mendefinisikan satu set dasar rander atribut untuk menguraikan grafis primitif.Atribut rander termasuk luas cakupannya ujung gambar,gabungan garis batas mitra dan atribute dasbor. Contoh: package asep.java2D.Basik; import java.awt.BasicStroke; import java.awt.Graphics; import java.awt.Graphics2D; import javax.swing.JFrame; import javax.swing.JPanel; /** * * @author asep */ public class ContohBasikStroke extends JPanel{ @Override protected void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D gd=(Graphics2D) g; float [] dash1={2f,0f,2f}; float [] dash2={1f,1f,1f}; float [] dash3={4f,0f,2f}; float [] dash4={4f,4f,1f}; gd.drawLine(20, 40, 250, 40); BasicStroke bs1=new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND,1.0f,dash1,2f); BasicStroke bs2=new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND, 1.0f,dash2,2f); aasseepp@gmail.com 11

Modul Pelatihan java 2D BasicStroke bs3=new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND, 1.0f,dash3,2f); BasicStroke bs4=new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND, 1.0f,dash4,2f); gd.setStroke(bs1); gd.drawLine(20, 80, 250, 80); gd.setStroke(bs2); gd.drawLine(20, 120, 250, 120); gd.setStroke(bs3); gd.drawLine(20, 160, 250, 160); gd.setStroke(bs4); gd.drawLine(20, 200, 250, 200); } /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here JFrame frame=new JFrame("contoh stroke"); frame.add(new ContohBasikStroke()); frame.setSize(280, 280); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } } Keluarannya:

Asep Komarudin

aasseepp@gmail.com

12

Modul Pelatihan java 2D

Asep Komarudin

Dalam contoh ini menampilkan bermacam tanda hubung.Sebuah atribute dasbor adalah sebuah pola yang dibuat dengan mencampur bagian buram dan transparan. float [] dash1={2f,0f,2f}; float [] dash2={1f,1f,1f}; float [] dash3={4f,0f,2f}; float [] dash4={4f,4f,1f}; Kode diatas adalh pendefinisian empat pola dasabor yang berbeda BasicStroke bs1=new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND,1.0f,dash1,2f); Ini adalah bentuk konstruksi basikStroke gd.setStroke(bs1); Metode yang digunakan adalah setStroke().metode untuk menerapkan basikStroke untuk konteks grafis saat ini. gd.drawLine(20, 200, 250, 200); Yang terakhir kita membaut garis 4. Caps caps adalah dekorasi yang diterpkan pada ujung subpaths tertutup dan segment dasbor.ada tiga topik akhir pada java 2D CAP_BUTT, CAP_ROUND, dan CAP_SQUARE. Contoh: package asep.java2D.Basik; import java.awt.BasicStroke; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import javax.swing.JFrame; import javax.swing.JPanel; /** * * @author asep */ public class ContohCaps extends JPanel{ @Override protected void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D gd=(Graphics2D) g; RenderingHints rh=new RenderingHints( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); rh.put(RenderingHints.KEY_RENDERING, aasseepp@gmail.com 13

Modul Pelatihan java 2D RenderingHints.VALUE_RENDER_QUALITY); gd.setRenderingHints(rh); BasicStroke bs1=new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL); gd.setStroke(bs1); gd.drawLine(20, 30, 250, 30); BasicStroke bs2=new BasicStroke(8, BasicStroke.CAP_ROUND, BasicStroke.JOIN_BEVEL); gd.setStroke(bs2); gd.drawLine(20, 80, 250, 80); BasicStroke bs3=new BasicStroke(8, BasicStroke.CAP_SQUARE, BasicStroke.JOIN_BEVEL); gd.setStroke(bs3); gd.drawLine(20, 130, 250, 130); BasicStroke bs4=new BasicStroke(); gd.setStroke(bs4); gd.drawLine(20, 20, 20, 140); gd.drawLine(250, 20, 250, 140); gd.drawLine(254, 20, 254, 140); } /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here JFrame frame=new JFrame("contoh caps"); frame.add(new ContohCaps()); frame.setSize(300, 250); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } } Keluarannya dalah:

Asep Komarudin

aasseepp@gmail.com

14

Modul Pelatihan java 2D

Asep Komarudin

Dalam contoh kita membuat tiga jenis ujung. gd.drawLine(20, 20, 20, 140); gd.drawLine(250, 20, 250, 140); gd.drawLine(254, 20, 254, 140); Terdapat tiga garis vertikal untuk menjelaskan perbedaan antara ujung.Baris depan CAP_ROUND dan CAP_SQUARE lebih besar daripada garis dengan CAP_BUTT .Besarnya perbedaan tergantung dari ukuran garis.Dalam contoh ini ukuran garis 8px tebal.Garis besar 8px, 4px disebelah kiri dan 4px disebelah kanan.lebih jelas lagi lihat gambar diatas. 5. Joins Join adalh Manipulasi yang diterapkan di persimpangan dua segmen garis dan dipersimpangan titik perhentian sebuah subpath.Ada tigabuah manipulasi yaitu JOIN_BEVEL, JOIN_MITER, dan JOIN_ROUND. Contoh: package asep.java2D.Basik; import java.awt.BasicStroke; import java.awt.Graphics; import java.awt.Graphics2D; import javax.swing.JFrame; import javax.swing.JPanel; /** * * @author asep */ public class ContohJoin extends JPanel{ @Override protected void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D gd=(Graphics2D) g; BasicStroke bs1=new BasicStroke(8, BasicStroke.CAP_ROUND, BasicStroke.JOIN_BEVEL); gd.setStroke(bs1); gd.drawRect(15, 15, 80, 50); BasicStroke bs2=new BasicStroke(8, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER); gd.setStroke(bs2); gd.drawRect(125, 15, 80, 50); BasicStroke bs3=new BasicStroke(8, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND); gd.setStroke(bs3); gd.drawRect(235, 15, 80, 50); }

aasseepp@gmail.com

15

Modul Pelatihan java 2D

Asep Komarudin

/** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here JFrame frame=new JFrame("contoh Join"); frame.add(new ContohJoin()); frame.setSize(350, 120); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } } Keluarannya adalah:

BasicStroke bs1=new BasicStroke(8, BasicStroke.CAP_ROUND, BasicStroke.JOIN_BEVEL); gd.setStroke(bs1); gd.drawRect(15, 15, 80, 50); Pada kode ini kita membuat persegi panjang dengan JOIN_BEVEL. BasicStroke bs2=new BasicStroke(8, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER); gd.setStroke(bs2); gd.drawRect(125, 15, 80, 50); Untuk yang ini kita menggambar persegi panjang dengan JOIN_MITER. BasicStroke bs3=new BasicStroke(8, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND); gd.setStroke(bs3); Untuk yang ini kita menggambar persegi panjang dengan JOIN_ROUND.

aasseepp@gmail.com

16

Modul Pelatihan java 2D

Asep Komarudin

SHAPES AND FILLS
1. Bentuk dasar Pertama kita buat beberapa bentuk dasar dari java 2D. package asep.java2D.ShapesAndFills; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.geom.Ellipse2D; import javax.swing.JFrame; import javax.swing.JPanel; /** * * @author asep */ public class BasicShapes extends JPanel{ @Override public void paint(Graphics g) { Graphics2D gd=(Graphics2D) g; gd.setColor(new Color(150, 150, 150)); RenderingHints rh=new RenderingHints(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_A NTIALIAS_ON); rh.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); gd.setRenderingHints(rh); gd.fillRect(20, 20, 50, 50); gd.fillRect(120, 20, 90, 60); gd.fillRoundRect(250, 20,70, 60, 25, 25); gd.fill(new Ellipse2D.Double(10, 100, 80, 100)); gd.fillArc(120, 130, 110, 100, 5, 150); gd.fillOval(270, 130, 50, 50); } /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here JFrame frame=new JFrame("Basik shape"); frame.add(new BasicShapes()); frame.setSize(350, 280); aasseepp@gmail.com 17

Modul Pelatihan java 2D frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLocationRelativeTo(null); frame.setVisible(true); } }

Asep Komarudin

Dalam contoh ini kita membuat enam bentuk dasar dari java 2D pada panel.Sebuah persegi, persegi panjang, persegipanjang bulat,elips, busur dan lingkaran. gd.fillRect(20, 20, 50, 50); gd.fillRect(120, 20, 90, 60); Pada fillRect() metode digunakan untuk menggambar persegi panjang dan persegi.dua parameter pertama x dan y adalah koordinat dari bentuk yang dapat ditarik .Dua parameter terakhir adalah lebar dan tinggi dari bentuk. gd.fillRoundRect(250, 20,70, 60, 25, 25); Kode diatas untuk membuat persegi panjang dengan lengkungan pada sudutnya.empat parameter peertama sama dengan diatas dan dua parameter terakhir adalah diameter horizontal dan vertikal dari busur di empat penjuru. 2. GeneralPath Bentuk ytang lebih komplex dapat dibuat dengan mengunakan kelas generalpath.ini merupakan geometrik yang dibangun dari garis lurus,krva bazier kuadrat dan kubik. Contohnya adalah membuat tampilan bintang. package asep.java2D.ShapesAndFills;

aasseepp@gmail.com

18

Modul Pelatihan java 2D import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import javax.swing.JFrame; import javax.swing.JPanel; /** * * @author asep */ public class Generalpth extends JPanel{ double points [][]={{0,85},{75,75},{100,10},{125,75}, {200,85},{150,125},{160,190},{100,150}, {40,190},{50,125},{0,85} }; @Override public void paint(Graphics g) { super.paint(g); int h=getHeight(); int w=getWidth(); Graphics2D gd=(Graphics2D) g; gd.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); gd.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); gd.translate(25, 5); java.awt.geom.GeneralPath star=new java.awt.geom.GeneralPath(); star.moveTo(points [0][0], points [0][1]); for(int k=1;k<points.length;k++) star.lineTo(points[k][0], points[k][1]); star.closePath(); gd.fill(star); } /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here JFrame frame=new JFrame("Bintang"); frame.add(new Generalpth()); frame.setSize(250, 250); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLocationRelativeTo(null); frame.setVisible(true); aasseepp@gmail.com 19

Asep Komarudin

Modul Pelatihan java 2D } } Keluarannya adalah:

Asep Komarudin

penjelasan : Kita akan membuat bintang dengan serangkaian point. double points [][]={{0,85},{75,75},{100,10},{125,75}, {200,85},{150,125},{160,190},{100,150}, {40,190},{50,125},{0,85} }; Ini adalah koordinat bintang. java.awt.geom.GeneralPath star=new java.awt.geom.GeneralPath(); Proses instatiate kelas generalPath. star.moveTo(points [0][0], points [0][1]); Kita pindahkan ke koordinat awal Generalpath diatas. for(int k=1;k<points.length;k++) star.lineTo(points[k][0], points[k][1]); Kita hubungkan semua koordinat titik bintang. star.closePath(); gd.fill(star); aasseepp@gmail.com 20

Modul Pelatihan java 2D

Asep Komarudin

Mengakhiri jalannya path dan mengisi daleman bintang.setelah itu terbentuk lah sebuah bintang. 3. Colors Kelass warna digunakan untuk bekerja dengan warna di java 2D.Untuk mengisi persegi panjang dengan warna kita gunakan metode Fillrect(). Contoh: package asep.java2D.ShapesAndFills; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import javax.swing.JFrame; import javax.swing.JPanel; /** * * @author asep */ public class ContohWarna extends JPanel{ @Override protected void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D gd=(Graphics2D) g; gd.setColor(new Color(125, 167, 116)); gd.fillRect(10, 15, 90, 60); gd.setColor(new Color(42, 179, 231)); gd.fillRect(130, 15, 90, 60); gd.setColor(new Color(70, 67, 123)); gd.fillRect(250, 15, 90, 60); gd.setColor(new Color(130, 100, 84)); gd.fillRect(10, 105, 90, 60); gd.setColor(new Color(252, 211, 61)); gd.fillRect(130, 105, 90, 60); gd.setColor(new Color(241, 98, 69)); gd.fillRect(250, 105,90,60); gd.setColor(new Color(217, 146, 54)); gd.fillRect(10, 195, 90, 60);

aasseepp@gmail.com

21

Modul Pelatihan java 2D gd.setColor(new Color(63, 121, 186)); gd.fillRect(130, 195, 90, 60); gd.setColor(new Color(31, 21, 1)); gd.fillRect(250, 195,90, 60); } /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here JFrame frame=new JFrame("contoh warna"); frame.add(new ContohWarna()); frame.setSize(350, 300); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } } Keluarannya adalah:

Asep Komarudin

Penjelasan program: Pada contoh diatas kita membaut persegi panjang berwarna. gd.setColor(new Color(125, 167, 116));

aasseepp@gmail.com

22

Modul Pelatihan java 2D

Asep Komarudin

Kode ini kita gunakan untuk membuat warana dengan campuran Red Green Blue,angka angka yang ada didalam kurung menyatakan campuran warna. gd.fillRect(10, 15, 90, 60); Untuk mengisi persegi panjang dengan warna kita gunakan metode FillRect(). 4. Gradien Dalam grafis komputer gradien adalah campuran halus nuansa dari gelap ke terang atau dari suatu warna kewarna lain.Dalam program mengambar 2D, dan program cat, gradien digunakan untuk membuat latar belakang,warna warni dan efek khusus serta untuk mensimulaikan lampu dan bayangan. Contoh program: package asep.java2D.ShapesAndFills; import java.awt.Color; import java.awt.GradientPaint; import java.awt.Graphics; import java.awt.Graphics2D; import javax.swing.JFrame; import javax.swing.JPanel; /** * * @author asep */ public class ContohGradien extends JPanel{ @Override protected void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D gd=(Graphics2D) g; GradientPaint gp1=new GradientPaint(5, 5, Color.RED, 20, 20, Color.black, true); gd.setPaint(gp1); gd.fillRect(20, 20, 300, 40); GradientPaint gp2=new GradientPaint(5, 25, Color.yellow, 20, 2, Color.black, true); gd.setPaint(gp2); gd.fillRect(20, 80, 300, 40); GradientPaint gp3=new GradientPaint(5, 25, Color.green, 2, 2, Color.black, true); gd.setPaint(gp3); gd.fillRect(20, 140, 300, 40); GradientPaint gp4=new GradientPaint(25, 25, Color.blue, 15, 25, Color.black, true); gd.setPaint(gp4); gd.fillRect(20, 200, 300, 40); GradientPaint gp5=new GradientPaint(0, 0, Color.orange, 0, 20, Color.black, true);

aasseepp@gmail.com

23

Modul Pelatihan java 2D gd.setPaint(gp5); gd.fillRect(20, 260, 300, 40); } /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here JFrame frame=new JFrame("Contoh gradien"); frame.add(new ContohGradien()); frame.setSize(350,350); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } } Keluarannya adalah:

Asep Komarudin

Penjelasan program: Pada program diatas kita buat lima buah persegi panjang dengan gradien warna. GradientPaint gp1=new GradientPaint(5, 5, Color.RED, 20, 20, Color.black, true); Untuk bekerja dengan gradien kita mengunakan kelas gradientPaint().Dengan memanipulasi nilai warna dan titik mulai dan titik akhir ,dengan cara tersebut kita bisa menghasilkan warna yang menarik. aasseepp@gmail.com 24

Modul Pelatihan java 2D gd.setPaint(gp1); Mengaktifkan gradientpaint. 5. Texture

Asep Komarudin

Texture adalah gambar bitmap diterapkan pada bentuk .Untuk bekerja dengan texture pada java 2D kita menguakan kelas TexturePaint. Sebelunya copy paste gambar yang akan ditampilkan pada pekage anda Contoh: package asep.java2D.ShapesAndFills; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Rectangle; import java.awt.TexturePaint; import java.awt.image.BufferedImage; import java.io.IOException; import javax.imageio.ImageIO; import javax.swing.JFrame; import javax.swing.JPanel; /** * * @author asep */ public class ContohTextur extends JPanel { BufferedImage Hti; BufferedImage java1; BufferedImage java2; TexturePaint Htitp; TexturePaint java1Tp; TexturePaint java2Tp; public ContohTextur() { try{ Hti=ImageIO.read(this.getClass().getResource("Hti.jpeg")); java1=ImageIO.read(this.getClass().getResource("java.jpg")); java2=ImageIO.read(this.getClass().getResource("java1.jpeg")); }catch(IOException e){ e.printStackTrace(); }

aasseepp@gmail.com

25

Modul Pelatihan java 2D } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D gd=(Graphics2D) g; Htitp=new TexturePaint(Hti, new Rectangle(0, 0, 90, 60)); java1Tp=new TexturePaint(java1, new Rectangle(0, 0, 90, 60)); java2Tp=new TexturePaint(java2, new Rectangle(0, 0, 90, 60)); gd.setPaint(Htitp); gd.fillRect(10, 15, 90, 60); gd.setPaint(java1Tp); gd.fillRect(130, 15, 90, 60); gd.setPaint(java2Tp); gd.fillRect(250, 15, 90, 60); } /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here JFrame frame=new JFrame("Contoh texture"); frame.add(new ContohTextur()); frame.setSize(350,120); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } } Keluarannya adalah:

Asep Komarudin

aasseepp@gmail.com

26

Modul Pelatihan java 2D

Asep Komarudin

Penjelasan programnya: Pada contoh diatas kita membuat tiga persegi panjang dengan texture yang berbeda. Hti=ImageIO.read(this.getClass().getResource("Hti.jpeg")); Kode ini untuk membaca gambar dengan gambar buffer. Htitp=new TexturePaint(Hti, new Rectangle(0, 0, 90, 60)); Kode ini digunakan untuk membuat texture paint. gd.setPaint(Htitp); gd.fillRect(10, 15, 90, 60); Kode ini digunakan untuk mengisi persegi panjang dengan textire.

TRANSPARANCY
Transparansi adalah kualitas yang bisa dilihat dari suatu material.cara termudah untuk memehami transparansi adalah membayangkan sepotong kaca atau air.Secara teknis sinar atau cahaya bisa masuk melalui kaca dan kita dapat melihat objek dibalik kaca. Dalam grafis komputer kita dapat mencapai efek transparansi mengunaka alfa compositing.Alfa kompositing adalah proses menggabungkan gambar dengan latar belakang untuk menciptakan penampilan panel yang transparan.Proses komposisi mengunakan alfa chanel.Alfa saluran lapisa 8bit dalam format file grafis yang digunakan untuk mengexpresikan transparansi.delapan bit per pixcel berfungsi sebagai masker dan mewakili tingkat tembus 256. Alfa composite kelas digunakan untuk bekerja dengan transparansi pada java 2D.Aturan penerapan alfa compositing dasar untuk menggabungkan pixcel sumber dan tujuan untuk mencapai efek pencampuran dan transparansi dengan grafis dan gambar. Untuk membuat alfaComposite harus disediakan dua nilai.penanda aturan dan nilai alfa .Aturan menetukan bagaimana kita menggabuangkan sunber dan tujuan pixcel.Paling sering digunakan adalah alfaComposite.SRC_OVER, nilai alfa dapat berkisar antara 0.0f (benar-benar taransparan) sampai 1.0f (benar-benar buram). 1. Ttransparant persegi panjang coontoh: package asep.java2D.Transparancy; import java.awt.AlphaComposite; import java.awt.Graphics; import java.awt.Graphics2D; import javax.swing.JFrame; import javax.swing.JPanel;

aasseepp@gmail.com

27

Modul Pelatihan java 2D /** * * @author asep */ public class TransparanKotak extends JPanel{ @Override public void paint(Graphics g) { super.paint(g);

Asep Komarudin

Graphics2D gd=(Graphics2D) g; for(int i=1;i<=10;i++){ gd.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, i*0.1f)); gd.fillRect(50*i,20,40,40); } } /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here JFrame frame=new JFrame("contoh transparan"); frame.add(new TransparanKotak()); frame.setSize(550, 120); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLocationRelativeTo(null); frame.setVisible(true); } } Keluarannya dalah:

Penjelasan : gd.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, i*0.1f)); Kode diatas adalah kunci.Kode ini menggunakan aturan alpaComposite.SRC_OVER.Nilai alpa dinamis dalam bentuk loop.

aasseepp@gmail.com

28

Modul Pelatihan java 2D 2.Pade demo

Asep Komarudin

Dalam contoh dibawah ini kita akan menghilangkan gambar .Gambar secara bertahap akan lebih taransparan dan sampai tidak terlihat sama sekali. Contoh: package asep.java2D.Transparancy; import java.awt.AlphaComposite; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.Timer; /** * * @author asep */ public class Padeout extends JPanel implements ActionListener{ Image image; Timer timer; private float alpa=1f; public Padeout() { image=new ImageIcon("/home/asep/Gambar/Hti.jpeg").getImage(); timer=new Timer(20, this); timer.start(); } @Override public void paint(Graphics g) { super.paint(g); Graphics2D gd=(Graphics2D) g; gd.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpa)); gd.drawImage(image, 30, 30,null); } /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here aasseepp@gmail.com 29

Modul Pelatihan java 2D JFrame frame=new JFrame("Contoh"); frame.add(new Padeout()); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(300, 300); frame.setLocationRelativeTo(null); frame.setVisible(true); } public void actionPerformed(ActionEvent ae) { alpa+=-0.01f; if(alpa<=0){ alpa=0; timer.stop(); } repaint(); } } Keluarannya adalah:

Asep Komarudin

Dengan alphaComposite kita bisa secara bertahap gambar memudar pada panel. Penjelasannya: gd.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpa)); Kode ini digunakan untuk membuat transparansi. alpa+=-0.01f; Dalam metode actionPervormed () metode ini secara bertahap akan mengurangi nilai alpa.Catatan aasseepp@gmail.com 30

Modul Pelatihan java 2D bhwa nilai alpha tidak boleh negatif. 3. Menunggu

Asep Komarudin

Dalam contoh ini kita akan membaut efek transparan untuk membaut demo menunggu.Kita akan menatik delapan baris yang secara bertahap akan hilang dan menciptakan sebuah ilusi seperti garis yang bergerak.Efek yang sering digunakan untuk menginformasikan kepada pengguna,bahwa komputer sedang loading.Contohnya ketika membuka video di internet. Contoh: package asep.java2D.Transparancy; import java.awt.AlphaComposite; import java.awt.BasicStroke; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.Timer; /** * * @author asep */ public class Loading extends JPanel implements ActionListener { Timer timer; int count; public Loading() { timer=new Timer(80, this); timer.setInitialDelay(190); timer.start(); } @Override public void paint(Graphics g) { super.paint(g); Graphics2D gd=(Graphics2D) g; gd.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); gd.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); final double [][]trs={ {0.0,0.15,0.30,0.5,0.65,0.80,0.9,1.0}, {1.0,0.0,0.15,0.30,0.5,0.65,0.8,0.9}, aasseepp@gmail.com 31

Modul Pelatihan java 2D {0.9,1.0,0.0,0.15,0.3,0.5,0.65,0.8}, {0.8,0.9,1.0,0.0,0.15,0.3,0.5,0.65}, {0.65,0.8,0.9,0.9,1.0,0.0,0.15,0.3}, {0.5,0.65,0.8,0.9,1.0,0.0,0.15,0.3}, {0.3,0.5,0.65,0.8,0.9,1.0,0.0,0.15}, {0.15,0.3,0.5,0.65,0.8,0.9,1.0,0.0} }; int width=getWidth(); int high=getHeight();

Asep Komarudin

gd.setStroke(new BasicStroke(3, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)); gd.translate(width/2, high/2); for(int i=0;i<8;i++){ gd.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVE R, (float) trs[count%8][i])); gd.rotate(Math.PI/4f); gd.drawLine(0, -10, 0, -40); } } /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here JFrame frame=new JFrame("Contoh loading"); frame.add(new Loading()); frame.setSize(200, 200); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLocationRelativeTo(null); frame.setVisible(true); } public void actionPerformed(ActionEvent ae) { repaint(); count++; } } Kelauarannya adalah:

aasseepp@gmail.com

32

Modul Pelatihan java 2D

Asep Komarudin

Gambar diatas menampilkan delapan garis dengan nilai alpha yang berbeda. final double [][]trs={ {0.0,0.15,0.30,0.5,0.65,0.80,0.9,1.0}, {1.0,0.0,0.15,0.30,0.5,0.65,0.8,0.9}, {0.9,1.0,0.0,0.15,0.3,0.5,0.65,0.8}, {0.8,0.9,1.0,0.0,0.15,0.3,0.5,0.65}, {0.65,0.8,0.9,0.9,1.0,0.0,0.15,0.3}, {0.5,0.65,0.8,0.9,1.0,0.0,0.15,0.3}, {0.3,0.5,0.65,0.8,0.9,1.0,0.0,0.15}, {0.15,0.3,0.5,0.65,0.8,0.9,1.0,0.0} }; Ini adalah array dua dimensi yang digunakan untuk nilai taransparansi. Terdapat delapan garis .Kedelapan garis ini akan terus menerus mengunakan nilai ini. gd.setStroke(new BasicStroke(3, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)); Kode ini digunakan untuk membaut garis sedikit lebih tebal, sehingga akn lebih mudah terlihat.pada ujungnya juga di buatkan lengkunga supaya kelihatan lebih bagus.

aasseepp@gmail.com

33

Modul Pelatihan java 2D

Asep Komarudin

KOMPOSISI
pada bab ini kita akn mendefinisikan operasi compositing.Compositing adalah mengabungkan unsur-unsur visual dari sumber yang terpisah menjadi gambar tunggal.Compositing digunakan untuk menciptakan ilusi bahwa semua element adalah bagian yang sama.Compositing secara luas digunakan dalam dunia film untuk membuat orang banyak. 1. Operasi Ada beberapa oprasi compositing.Disini akan ditunjukan beberapa oprasi pada contoh berikut.Kelas AlphaComposite menginplementasikan aturan alpha compositing dasrar untuk menggabungkan warna sumber dan tujuan untuk mencapai efek pencampuran dan transparansi dengan grafis dan gambar. Kita akan membaut dua buah objek pada panel.objek pertama disebut tujuan, yang kedua disebut sumber.Kelas alphaComposite menentukan bagaimana keduanya akan dicampur bersama-sama.Jika kita memiliki aturan alphaComposite.SRC_OVER, pixcel dari objek sumber akan ditarik pada benda yang membyanginya. Contoh: package asep.java2D.Komposisi; import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import javax.swing.JFrame; import javax.swing.JPanel; /** * * @author asep */ public class Campuran extends JPanel{ int ruls[]={ AlphaComposite.DST, AlphaComposite.DST_ATOP, AlphaComposite.DST_OUT, AlphaComposite.SRC, AlphaComposite.SRC_ATOP, AlphaComposite.SRC_OUT }; @Override public void paint(Graphics g) { super.paint(g); Graphics2D gd=(Graphics2D) g; for(int x=20,y=20,i=0;i<ruls.length;x+=60,i++){ aasseepp@gmail.com 34

Modul Pelatihan java 2D AlphaComposite ac=AlphaComposite.getInstance(ruls[i], 0.8f); BufferedImage bi=new BufferedImage(60, 60, BufferedImage.TYPE_INT_ARGB); Graphics2D gd1=bi.createGraphics(); gd1.setPaint(Color.blue); gd1.fillRect(0, 0, 40, 40); gd1.setComposite(ac); gd1.setPaint(Color.green); gd1.fillRect(5, 5, 40, 40); gd.drawImage(bi, x,y, null); } } /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here JFrame frame=new JFrame("Contoh"); frame.add(new Campuran()); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(400, 150); frame.setLocationRelativeTo(null); frame.setVisible(true); } } keluarannya adalah:

Asep Komarudin

kode diatas mengabarkan persegi panjang dan mengabungkannya denga enam opsi copositing yang berbeda. penjelasan : int ruls[]={ AlphaComposite.DST,

aasseepp@gmail.com

35

Modul Pelatihan java 2D AlphaComposite.DST_ATOP, AlphaComposite.DST_OUT, AlphaComposite.SRC, AlphaComposite.SRC_ATOP, AlphaComposite.SRC_OUT }; Pada kode ini kita membuat enam aturan yang berbeda. AlphaComposite ac=AlphaComposite.getInstance(ruls[i], 0.8f); Kode untuk mendapatkan keals alphaComposite.

Asep Komarudin

BufferedImage bi=new BufferedImage(60, 60, BufferedImage.TYPE_INT_ARGB); Graphics2D gd1=bi.createGraphics(); Mengunakan gambar buffer untuk melakukan oprasi komposisi. gd1.setComposite(ac); Mengatur composite untuk kontext grafik 2D. gd.drawImage(bi, x,y, null); Menggambar image pada panel. 2. Matahari dan awan pada contoh selanjutnuya kita akan menampilkan matahari dibalik awan.Kita akan mengunakan teknik komposisi pada animasi ini. Contoh: package asep.java2D.Komposisi; import java.awt.AlphaComposite; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.image.BufferedImage; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.Timer; aasseepp@gmail.com 36

Modul Pelatihan java 2D

Asep Komarudin

/** * * @author asep */ public class MatahariDanAwan extends JPanel implements ActionListener{ Image matahari; Image awan; Timer timer; private float alpha; public MatahariDanAwan() { matahari=new ImageIcon(this.getClass().getResource("matahari.png")).getImage(); awan=new ImageIcon(this.getClass().getResource("awan1.png")).getImage(); timer=new Timer(800, this); timer.start(); alpha=1f; } @Override public void paint(Graphics g) { super.paint(g); Graphics2D gd=(Graphics2D) g; BufferedImage bi=new BufferedImage(300,300, BufferedImage.TYPE_INT_ARGB); Graphics2D gd1=bi.createGraphics(); AlphaComposite ac=AlphaComposite.getInstance(AlphaComposite.SRC_OVER,alpha); gd1.drawImage(matahari, 50, 40,null); gd1.setComposite(ac); gd1.drawImage(awan, 0,0, null); gd.drawImage(bi, 0,0, null); }

/** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here JFrame frame=new JFrame("contoh awan dan matahari"); frame.add(new MatahariDanAwan()); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLocationRelativeTo(null); frame.setSize(300, 300); frame.setVisible(true); } aasseepp@gmail.com 37

Modul Pelatihan java 2D

Asep Komarudin

public void actionPerformed(ActionEvent ae) { alpha -=0.1; if(alpha<=0){ alpha=0; timer.stop(); } repaint(); } } Keluarannya adalah:

Matahari berada dibalik awan dan lama-lama awan akan menghilang. matahari=new ImageIcon(this.getClass().getResource("matahari.png")).getImage(); awan=new ImageIcon(this.getClass().getResource("awan1.png")).getImage(); Kode ini untuk membuat memanggil gambar matahari dan awan dari pekage. AlphaComposite ac=AlphaComposite.getInstance(AlphaComposite.SRC_OVER,alpha); Disini saya menggunakan aturan AlphaComposite.SRC_OVER .Itu menjadi sumber untuk menyatukan gambar dan menimpa pxcel yang kosong.

aasseepp@gmail.com

38

Modul Pelatihan java 2D

Asep Komarudin

KLIPING
1. Kliping image Kliping adalah membatasi gambar kearea tertentu.Hal ini dilakukan untuk efisiensi dan menciptakan berbagai efek. Contohnya: package asep.java2D.Kliping; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.RenderingHints; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.geom.Ellipse2D; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.Timer; /** * * @author asep */ public class Kliping extends JPanel implements ActionListener{ private int posisi_x=8; private int posisi_y=8; private int radius=90; Timer timer; Image image; private double data []={3,3}; public Kliping() { image=new ImageIcon(this.getClass().getResource("Hti.jpeg")).getImage(); timer=new Timer(15, this); timer.start(); } @Override public void paint(Graphics g) { super.paint(g); Graphics2D gd=(Graphics2D) g; RenderingHints rh=new RenderingHints(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE _ANTIALIAS_ON); aasseepp@gmail.com 39

Modul Pelatihan java 2D rh.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); gd.setClip(new Ellipse2D.Double(posisi_x, posisi_y, radius, radius)); gd.drawImage(image, 5,5, null); }

Asep Komarudin

/** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here JFrame frame=new JFrame("contoh kliping"); frame.add(new Kliping()); frame.setSize(300, 300); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } public void actionPerformed(ActionEvent ae) { int w=getWidth(); int h=getHeight(); if(posisi_x<0){ data[0]=Math.random()%4+5; }else if(posisi_x>w-radius){ data[0]=-(Math.random()%4+5); } if(posisi_y<0){ data[1]=Math.random()%4+5; }else if(posisi_y<h-radius){ data[1]=-(Math.random()%4+5); } posisi_x +=data[0]; posisi_y +=data[1]; repaint(); } } Keluarannya adalah:

aasseepp@gmail.com

40

Modul Pelatihan java 2D

Asep Komarudin

Dalam contoh ini kita akan membuat klip image.Sebuah lingkaran bergerak pada layar dan menunjukan bagian dari gambar yang menjadi dasar.hal ini seolah-olah kita melihat dari lubang. gd.setClip(new Ellipse2D.Double(posisi_x, posisi_y, radius, radius)); Ini adalah bagian terpenting kode,Pada kode ini kita membuat pembatas untuk bentuk tertentu.pada kode ini adalah sebuah linkaran. if(posisi_x<0){ data[0]=Math.random()%4+5; }else if(posisi_x>w-radius){ data[0]=-(Math.random()%4+5); } if(posisi_y<0){ data[1]=Math.random()%4+5; }else if(posisi_y<h-radius){ data[1]=-(Math.random()%4+5); } Jika lingkaran hits kiri atau sisi kanan layar, arah perubahan lingkaran secara acak.sama juga untuk sisi atas dan bawah. 2. Kliping Shape Pada contoh erikut, kita akan melakukan kliping dua bentuk.Sebuah persegi panjang dan lingkaran. Contohnya: aasseepp@gmail.com 41

Modul Pelatihan java 2D package asep.java2D.Kliping; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Rectangle; import java.awt.RenderingHints; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.geom.AffineTransform; import java.awt.geom.Ellipse2D; import java.awt.geom.GeneralPath; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.Timer; /** * * @author asep */ public class KlipingShape extends JPanel implements ActionListener { private Timer timer; private double rotasi=1; private int posisi_x=8; private int posisi_y=8; private int radius=60; private double data []={1,1}; public KlipingShape() { timer=new Timer(10, this); timer.start(); } @Override public void paint(Graphics g) { super.paint(g); Graphics2D gd=(Graphics2D) g; gd.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); gd.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); int w=getWidth(); int h=getHeight(); Rectangle r=new Rectangle(0, 0, 200, 80); AffineTransform at=new AffineTransform(); at.rotate(Math.toRadians(rotasi),w/2,h/2); aasseepp@gmail.com 42

Asep Komarudin

Modul Pelatihan java 2D at.translate(w/2-100, h/2-40); Ellipse2D circle=new Ellipse2D.Double(posisi_x, posisi_y, radius, radius); step(); GeneralPath gp=new GeneralPath(); gp.append(at.createTransformedShape(r), false); gd.setColor(new Color(110, 110, 110)); gd.clip(circle); gd.clip(gp); gd.fill(circle); gd.setClip(new Rectangle(0, 0, w, h)); gd.draw(circle); gd.draw(gp); } public void step(){ int w=getWidth(); int h=getHeight(); if(posisi_x<0){ data[0]=1; }else if(posisi_x>w-radius){ data[0]=-1; } if(posisi_y<0){ data[1]=1; }else if(posisi_y>h-radius){ data[1]=-1; } posisi_x +=data[0]; posisi_y +=data[1]; }

Asep Komarudin

/** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here JFrame frame=new JFrame("contoh shape"); frame.add(new KlipingShape()); frame.setSize(300, 300); frame.setLocationRelativeTo(null); aasseepp@gmail.com 43

Modul Pelatihan java 2D frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } public void actionPerformed(ActionEvent ae) { rotasi +=1; repaint(); } } Keluarannya adalah:

Asep Komarudin

Pada contoh kita mempunyai lingkaran yang selalu bergerak memantul dan persegi panjang berputar.ketika bentuk -bentuk ini saling bertumpang tindih, daeerah yang dihasilkan akan berubah warna. Penjelasannya: Rectangle r=new Rectangle(0, 0, 200, 80); AffineTransform at=new AffineTransform(); at.rotate(Math.toRadians(rotasi),w/2,h/2); at.translate(w/2-100, h/2-40); Kode ini digunakan agar persegi panjang yang sedang diputar berada di tengah-tengah panel. GeneralPath gp=new GeneralPath(); gp.append(at.createTransformedShape(r), false); Kode ini digunakan untuk mendapatkan bentuk persegi panjang berputar. gd.clip(circle); aasseepp@gmail.com 44

Modul Pelatihan java 2D gd.clip(gp); gd.fill(circle);

Asep Komarudin

Kode ini digunakan untuk membatasi gambar cuma dua bentuk saja.Jika mereka tumpang tindih bagian yang bertumpang tindih berrubah warna. gd.setClip(new Rectangle(0, 0, w, h)); Kode untuk reset daerah klip,sebelum kita menggambar bentuk.

TRANSPORMASI
Transpormasi affine terdiri dari nol atau lebih tranpormasi linear(rotasi,pensekalaan atau geser) dan terjemaahan (pergeseran).Beberapa transpormasi dapat dikombinasikan kedalam matrix tunggal.Rotasi adalah transpormasi yang bergerak disekitar pusat yang tetap.Scaling adalah transpormasi yang memperbesar atau mengurangi objek.Faktor sekala adalah sama disemua arah.Translation adalh sebuah transpormasi yang bergerak setiap titik jarak konstan dalam arah tertentu.Shear adalah transpormasi yang bergerak tegak lurus objek ke sumbu yang diberikan, dengan nilai lebih besar pada suatu sisi dari sumbu yang lain. Affine Transporm adalah kelas di java 2D untuk melakukan transpormasi afin. 1. Translation

aasseepp@gmail.com

45

Sign up to vote on this title
UsefulNot useful