Monday, September 26, 2011

Efek cermin dengan java 2d

Tags
Assalamualakum wr. wb...
Sahabat blogger semua seperti kita ketahui java perupakan salah satu bahasa pemprograman yang cukup populer saat ini. Jika anda orang yang ingin menekuni bidang programming, bahasa ini cukup menjanjika jika dipelajari. Banyak aplikasi perbankan yang dibuat menggunakan bahasa ini, jadi ga rugi dong kalau kita pelajari.. dan hampir di setiap kampus mau Negri maupun swasta ada mata kulian ini walalupun istilahnya macaem-macem.
Salahsatu bagian dari pemprograman java adalah grafik 2d, bagian ini banyak mengolah tampilan bia render, cermin duplikasi dan lain sebagainya.
Kali ini kita akan buat tutorial membuat efek cermin tampilannya seperti diatas.

Baca Juga :
Untuk memulainya kita harus menuiapkan beberapa kebutuhan.
  1. Netbeans IDE, bisa kamu download dari link berikut  Netbeans
  2. Siapkan Image untuk kita jadikan efek cermin.
 Selanjutnya jika Netbeans sudah siap, buatlah projek java baru dengan struktur seperti image dibawah, untuk proses pembuatnnya seperti biasa, buatlah pecage sbb:
untuk isi kode pada class IconBayang sbb:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package asep.swiing008.Bayangan;

import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;

/**
 *
 * @author user
 */
public final class IconBayang {

    public IconBayang() {
    }
    public static BufferedImage ConfertToBufferedImage(Image image){
        //mengambil ukuran image
        int with=image.getWidth(null);
        int heigh=image.getHeight(null);
        //membuat buffered image baru
        BufferedImage result=new BufferedImage(with, heigh, BufferedImage.TYPE_INT_ARGB);
        Graphics2D g=result.createGraphics();
        g.drawImage(image, 0,0, null);
        g.dispose();
        //kembalikan hasil
        return result;
    }
    public static BufferedImage createreplectionbufferedImage(BufferedImage image){
        //membuat result image
        BufferedImage result=new BufferedImage(image.getWidth(), image.getHeight()*6/4, BufferedImage.TYPE_INT_ARGB);
        Graphics2D g=result.createGraphics();
        //gambarkan image
        g.drawImage(image, 0,0, null);
        //gambar cermin gambar
        g.scale(1.0, -1.0);
        g.drawImage(image, 0,-image.getHeight()*2, null);
        g.scale(1.0, -1.0);
        //pindahkan ke cermin
        g.translate(0, image.getHeight());
        //buat gradien mask
        GradientPaint mask=new GradientPaint(0, 0, new Color(1f, 1f, 1f,0.5f), 0, image.getHeight()/2, new Color(1f, 1f, 1f, 0f));
        g.setPaint(mask);
        //set alpha composite
        g.setComposite(AlphaComposite.DstIn);
        //menggamnbar mask
        g.fillRect(0, 0, image.getWidth(), image.getHeight());
        g.dispose();
        return result;
    }
    public static BufferedImage createreplectionbufferedImage(Image image){
        return createreplectionbufferedImage(ConfertToBufferedImage(image));
    }
}

untuk isi kode pada class iconlabel sbb:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package asep.swiing008.Bayangan;

import java.awt.image.BufferedImage;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.SwingConstants;

/**
 *
 * @author user
 */
public class IconLabel extends JLabel{

    private Icon iconReflect;

    public IconLabel() {
        super();
        setHorizontalTextPosition(SwingConstants.CENTER);
        setVerticalTextPosition(SwingConstants.BOTTOM);
    }

    public Icon getIconReflect() {
        return iconReflect;
    }

    public void setIconReflect(Icon iconReflect) {
        this.iconReflect = iconReflect;
        if(iconReflect==null){
            firePropertyChange("icon", getIconReflect(), iconReflect);
            this.iconReflect=iconReflect;
            setIcon(iconReflect);
        }else{
            if(!(iconReflect instanceof ImageIcon)){
                throw new IllegalArgumentException();
            }
            firePropertyChange("icon", getIconReflect(), iconReflect);
            this.iconReflect=iconReflect;
            BufferedImage img=IconBayang.createreplectionbufferedImage(
                    ((ImageIcon)iconReflect).getImage());
            setIcon(new ImageIcon(img));
        }
    }


}







kemudian copi dan paste sebuah image kedalam pecage tadi.
isi kode untuk class Run sbb:
package asep.swiing008.Bayangan;

import java.awt.BorderLayout;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import sun.applet.Main;

/**
 *
 * @author user
 */
public class run extends JFrame{

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new run().setVisible(true);
            }
        });
    }

    public run() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setTitle("percobaan asep");
        setLayout(new BorderLayout());
        IconLabel icon=new IconLabel();
        icon.setIconReflect(new ImageIcon(this.getClass().getResource("icon.jpg")));
        add(icon);
        pack();
        setLocationRelativeTo(null);
    }
}

kurang lebih seperti itu bagi yang kurang paham bisa bertanya di komentar.
selamat mencoba.........