Image Viewer BlueJ Versi 3.0

Tugas Pemrograman Berbasis Objek (PBO)
Membuat Image Viewer Dengan Bluej Versi 3.0

Kali ini saya akan membuat image viewer menggunakan BlueJ dengan konsep GUI, namun disini saya menambahkan kelas filter yang terdiri dari DarkerFilter, LightFilter, dan ThresholdFilter. Berikut source code dan tampilan akhirnya. Sehingga disini saya membutuhkan delapan class yaitu, ImageViewer, ImagePanel, ImageFileManager, OFImage, Filter, DarkerFilter, LighterFilter, dan ThresholdFilter. Source code ImagePanel, ImageFileManager, dan OFImage dapat dilihat pada postingan saya sebelumnya, sehingga saya hanya menjelaskan lima class disini karena ImageViewer mengalami sedikit perubahan. 

1. Source Code Filter

 /**  
  * Write a description of class Filter here.  
  *  
  * @author Yuki Yanuar Ratna  
  * @version 3.0  
  */  
 public abstract class Filter  
 {  
   private String name;  
   /**  
    * Create a new filter with a given name.  
    * @param name The name of the filter.  
    */  
   public Filter(String name)  
   {  
     this.name = name;  
   }  
   /**  
    * Return the name of this filter.  
    *   
    * @return The name of this filter.  
    */  
   public String getName()  
   {  
     return name;  
   }  
   /**  
    * Apply this filter to an image.  
    *   
    * @param image The image to be changed by this filter.  
    */  
   public abstract void apply(OFImage image);  
 }  

2. Sour Code DarkerFilter

 /**  
  * Write a description of class DarkerFilter here.  
  *  
  * @author Yuki Yanuar Ratna  
  * @version 3.0  
  */  
 public class DarkerFilter extends Filter  
 {  
   /**  
    * Constructor for objects of class DarkerFilter.  
    * @param name The name of the filter.  
    */  
   public DarkerFilter(String name)  
   {  
     super(name);  
   }  
   /**  
    * Apply this filter to an image.  
    *   
    * @param image The image to be changed by this filter.  
    */  
   public void apply(OFImage image)  
   {  
     int height = image.getHeight();  
     int width = image.getWidth();  
     for(int y = 0; y < height; y++) {  
       for(int x = 0; x < width; x++) {  
         image.setPixel(x, y, image.getPixel(x, y).darker());  
       }  
     }  
   }  
 }  

3. Source Code LighterFilter

 /**  
  * Write a description of class LighterFilter here.  
  *  
  * @author Yuki Yanuar Ratna  
  * @version 3.0  
  */  
 public class LighterFilter extends Filter  
 {  
      /**  
       * Constructor for objects of class LighterFilter.  
    * @param name The name of the filter.  
       */  
      public LighterFilter(String name)  
   {  
     super(name);  
      }  
   /**  
    * Apply this filter to an image.  
    *   
    * @param image The image to be changed by this filter.  
    */  
   public void apply(OFImage image)  
   {  
     int height = image.getHeight();  
     int width = image.getWidth();  
     for(int y = 0; y < height; y++) {  
       for(int x = 0; x < width; x++) {  
         image.setPixel(x, y, image.getPixel(x, y).brighter());  
       }  
     }  
   }  
 }  

4. Source Code ThresholdFilter

 /**  
  * Write a description of class ThresholdFilter here.  
  *  
  * @author Yuki Yanuar Ratna  
  * @version 3.0  
  */  
 import java.awt.Color;  
 /**  
  * An three-level gray-based threshold filter.  
  *   
  * @author Michael Kolling and David J Barnes   
  * @version 1.0  
  */  
 public class ThresholdFilter extends Filter  
 {  
      /**  
       * Constructor for objects of class ThresholdFilter.  
    * @param name The name of the filter.  
       */  
      public ThresholdFilter(String name)  
   {  
     super(name);  
      }  
   /**  
    * Apply this filter to an image.  
    *   
    * @param image The image to be changed by this filter.  
    */  
   public void apply(OFImage image)  
   {  
     int height = image.getHeight();  
     int width = image.getWidth();  
     for(int y = 0; y < height; y++) {  
       for(int x = 0; x < width; x++) {  
         Color pixel = image.getPixel(x, y);  
         int brightness = (pixel.getRed() + pixel.getBlue() + pixel.getGreen()) / 3;  
         if(brightness <= 85) {  
           image.setPixel(x, y, Color.BLACK);  
         }  
         else if(brightness <= 170) {  
           image.setPixel(x, y, Color.GRAY);  
         }  
         else {  
           image.setPixel(x, y, Color.WHITE);  
         }  
       }  
     }  
   }  
 }  

5. Source Code ImageViewer

 /**  
  * Write a description of class ImageViewer here.  
  *  
  * @author Yuki Yanuar Ratna  
  * @version 1.0  
  */  
 import java.awt.*;  
 import java.awt.event.*;  
 import java.awt.image.*;  
 import javax.swing.*;  
 import java.io.File;  
 import java.util.List;  
 import java.util.ArrayList;  
 import java.util.Iterator;  
 public class ImageViewer  
 {   
   private static final String VERSION = "Version 2.0";  
   private static JFileChooser fileChooser= new JFileChooser(System.getProperty("user.dir"));  
   private JFrame frame;  
   private ImagePanel imagePanel;  
   private JLabel filenameLabel;  
   private JLabel statusLabel;  
   private OFImage currentImage;  
   private List<Filter> filters;  
   /**  
    * Create an ImageViewer show it on screen.  
    */  
   public ImageViewer()  
   {  
     currentImage = null;  
     filters = createFilters();  
     makeFrame();  
   }  
   // ---- implementation of menu functions ----  
   /**  
    * Open function: open a file chooser to select a new image file.  
    */  
   private void openFile()  
   {  
     int returnVal = fileChooser.showOpenDialog(frame);  
     if (returnVal != JFileChooser.APPROVE_OPTION)   
     {  
       return;   
     }  
     File selectedFile = fileChooser.getSelectedFile();  
     currentImage = ImageFileManager.loadImage(selectedFile);  
     if (currentImage == null)   
     {  
       JOptionPane.showMessageDialog(frame,"The file was not in a recognized image file format.","Image Load Error",JOptionPane.ERROR_MESSAGE);  
       return;  
     }  
     imagePanel.setImage(currentImage);  
     frame.pack();  
   }  
   /**  
    * Quit function: quit the application.  
    */  
   private void quit()  
   {  
     System.exit(0);  
   }  
   private void applyFilter(Filter filter)  
   {  
     if (currentImage != null)  
     {  
       filter.apply(currentImage);  
       frame.repaint();  
     }  
   }  
   private void showAbout()  
   {  
     JOptionPane.showMessageDialog(frame,"ImageViewer\n" + VERSION, "About ImageViewer",JOptionPane.INFORMATION_MESSAGE);  
   }  
   private void showFilename (String filename)  
   {  
     if (filename == null)  
     {  
       filenameLabel.setText("No file displayed.");  
     }  
     else   
     {  
       filenameLabel.setText("File: " + filename);  
     }  
   }  
   private void showStatus(String text)  
   {  
     statusLabel.setText(text);  
   }  
   private List<Filter> createFilters()  
   {  
     List<Filter> filterList = new ArrayList<Filter>();  
     filterList.add(new DarkerFilter("Darker"));  
     filterList.add(new LighterFilter("Lighter"));  
     filterList.add(new ThresholdFilter("Threshold"));  
     return filterList;  
   }  
   // ---- swing stuff to build the frame and all its components ----  
   /**  
    * Create the Swing frame and its content.  
    */  
   private void makeFrame()  
   {  
     frame = new JFrame("ImageViewer");  
     makeMenuBar(frame);  
     Container contentPane = frame.getContentPane();  
     imagePanel = new ImagePanel();  
     contentPane.add(imagePanel);  
     // building is done - arrange the components and show      
     frame.pack();  
     frame.setVisible(true);  
   }  
   /**  
    * Create the main frame's menu bar.  
    * @param frame  The frame that the menu bar should be added to.  
    */  
   private void makeMenuBar(JFrame frame)  
   {  
     final int SHORTCUT_MASK =  
       Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();  
     JMenuBar menubar = new JMenuBar();  
     frame.setJMenuBar(menubar);  
     // create the File manu  
     JMenu fileMenu = new JMenu("File");  
     menubar.add(fileMenu);  
     JMenuItem openItem = new JMenuItem("Open");  
       openItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, SHORTCUT_MASK));  
       openItem.addActionListener(new ActionListener() {  
                 public void actionPerformed(ActionEvent e) { openFile(); }  
               });  
     fileMenu.add(openItem);  
     JMenuItem quitItem = new JMenuItem("Quit");  
       quitItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, SHORTCUT_MASK));  
       quitItem.addActionListener(new ActionListener() {  
           public void actionPerformed(ActionEvent e) { quit(); }  
       });  
     fileMenu.add(quitItem);  
     JMenu Menu = new JMenu("Filter");  
     menubar.add(Menu);  
     for (final Filter filter : filters)  
     {  
       JMenuItem filterItem = new JMenuItem(filter.getName());  
       filterItem.addActionListener(new ActionListener()  
       {  
         public void actionPerformed(ActionEvent e) {  
           applyFilter(filter);  
         }  
       });  
       Menu.add(filterItem);  
     }  
   }  
 }  

6. Tampilan Akhir


Tidak menggunakan filter apapun 


Menggunakan filter darker


Menggunakan filter lighter


Menggunakan filter threshold



Sekian, semoga bermanfaat.

Komentar

Postingan populer dari blog ini

Tugas Membuat Jam Digital

Codeigniter "Toko Buah"

Personal Web