Tentu teman – teman semua pasti pernah melihat kan sebuah efek transformasi refleksi pantulan gambar dipermukaan entah itu di sebuah web ataupun di sebuah aplikasi mobile dan desktop.
Jika kalian berfikir bahwa efek refleksi gambar tersebut hanya bisa dibuat dengan software editing gambar kalian salah besar, nyatanya pada bahasa pemrograman java sendiri juga bisa membuat efek refleksi pantulan gambar tersebut.
Di bahasa pemrograman java untuk membuat sebuah transformasi refleksi gambar pada dasarnya kita hanya mengambil gambar asli lalu kemudian menggambarnya lagi dengan posisi terbalik di skala -1 ke arah Y, kemudian memberinya sebuah refleksi memudar dibawah gambar.
Untuk melakukan itu semua kita perlu menggunakan AlphaComposite.
Baca juga : Cara Membuat Column Chart (Grafik Kolom) Java 2D Netbeans
Membuat Pantulan Tetapi Tidak dengan Efek Memudar.
Pertama, kita akan menggambar sebuah contoh pantulan tetapi tidak dengan efek memudar. Kita asumsikan kita memiliki BufferedImage yang disebut gambar dan Graphics2D disebut g2d serta celah parameter yang memberikan jarak antara gambar dan pantulannya. Seperti ini contoh source code nya:
int imageWidth = image.getWidth(); int imageHeight = image.getHeight(); g2d.translate( x, y ); g2d.drawRenderedImage( image, null ); g2d.translate( 0, 2*imageHeight+gap ); g2d.scale( 1, -1 ); g2d.drawRenderedImage( image, null );
Menambahkan Efek Fading
Sekarang untuk menambahkan efek fading. Yang harus kita lakukan adalah menggambar refleksi dengan opacity seperti memudar kebawah.
Untuk membuatnya bisa dengan cara menggambar gradien transparan di atas gambar menggunakan komposit DST_IN.
Namun, ini tidak akan berfungsi ketika kita menggambar langsung ke objek Grafik asli kita karena itu akan membuat latar belakang transparan juga, jadi kita perlu membuat gambar perantara untuk membuat refleksi transparan dan kemudian menggambar gambar itu menggunakan Grafik asli kita.
Seperti ini contoh source code bagian refleksi memudar gambarnya :
BufferedImage reflection = new BufferedImage( imageWidth, imageHeight, BufferedImage.TYPE_INT_ARGB ); Graphics2D rg = reflection.createGraphics(); rg.drawRenderedImage( image, null ); rg.setComposite( AlphaComposite.getInstance( AlphaComposite.DST_IN ) ); rg.setPaint( new GradientPaint( 0, imageHeight*fadeHeight, new Color( 0.0f, 0.0f, 0.0f, 0.0f ), 0, imageHeight, new Color( 0.0f, 0.0f, 0.0f, opacity ) ) ); rg.fillRect( 0, 0, imageWidth, imageHeight ); rg.dispose(); g2d.drawRenderedImage( reflection, null );
Dan dibawah ini adalah keseluruhan source code dari projek transformasi refleksi Java 2D, kalian tentu harus menyediakan sebuah gambar sendiri untuk direfleksikan.
import java.awt.*; import java.awt.image.*; import java.io.*; import javax.imageio.*; import javax.swing.*; /** * * @author billylorenzia */ public class Refleksi extends JComponent{ private BufferedImage image; public Refleksi() { try { image = ImageIO.read( new File( "E:\reflection\namaGambar.png" ) ); } catch ( Exception e ) { e.printStackTrace(); } this.setPreferredSize(new Dimension(700, 700)); this.setBackground(Color.white); } public void paintComponent( Graphics g ) { Graphics2D g2d = (Graphics2D)g; int width = getWidth(); int height = getHeight(); int imageWidth = image.getWidth(); int imageHeight = image.getHeight(); int gap = 20; float opacity = 0.4f; float fadeHeight = 0.3f; g2d.setPaint( new GradientPaint( 0, 0, Color.black, 0, height, Color.darkGray ) ); g2d.fillRect( 0, 0, width, height ); g2d.translate( (width-imageWidth)/2, height/2-imageHeight ); g2d.drawRenderedImage( image, null ); g2d.translate( 0, 2*imageHeight+gap ); g2d.scale( 1, -1 ); BufferedImage reflection = new BufferedImage( imageWidth, imageHeight, BufferedImage.TYPE_INT_ARGB ); Graphics2D rg = reflection.createGraphics(); rg.drawRenderedImage( image, null ); rg.setComposite( AlphaComposite.getInstance( AlphaComposite.DST_IN ) ); rg.setPaint( new GradientPaint( 0, imageHeight*fadeHeight, new Color( 0.0f, 0.0f, 0.0f, 0.0f ), 0, imageHeight, new Color( 0.0f, 0.0f, 0.0f, opacity ) ) ); rg.fillRect( 0, 0, imageWidth, imageHeight ); rg.dispose(); g2d.drawRenderedImage( reflection, null ); } /** * @param args the command line arguments */ public static void main(String[] args) { JFrame frame = new JFrame(); frame.setTitle("Refleksi"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Refleksi canvas = new Refleksi(); frame.getContentPane().add(canvas); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } }
Berikut ini adalah tampilan gambar yang telah di refleksi.
Demikian lah cara membuat transformasi refleksi pada Java 2D, semoga artikel ini dapat membantu kalian untuk lebih mengetahui apa itu java reflections.
Baca Juga : Cara Membuat Pola Persegi Dengan JAVA Graphics2D Netbeans
Sekian, semoga bermanfaat.