Tugas Rumah Image Viewer with Filter

Nama : Putri Endah Puspitasari
NRP   : 05111740000039

Kelas : PBO - B

Pada pertemuan hari Senin, 26 November 2018, kelas kami diberi Tugas Rumah yaitu Membuat Image Viewer dengan Filter yag terdiri dari 8 class di dalamnya yaitu 
1. Class Image Viewer
2. Class Image Panel
3. Class OF Image
4. Class Image File Manager
5. Class Filter
6. Class Threshold Filter
7. Class Lighter Filter
8. Class Darker Filter



1. Class Image Viewer


  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;   
  /**   
  * Class Image Viewer  
  * Nama : Putri Endah Puspitasari  
  * NRP : 05111740000039  
  * Kelas: PBO - B  
  * Senin, 27 November 2018   
  */   
  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;   
   public ImageViewer()   
   {   
    currentImage = null;   
    filters = createFilters();   
    makeFrame();   
   }   
   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);   
    showFilename(selectedFile.getPath());   
    showStatus("File loaded.");   
    frame.pack();   
   }   
   private void close()   
   {   
    currentImage = null;   
    imagePanel.clearImage();   
    showFilename(null);   
   }   
   private void quit()   
   {   
    System.exit(0);   
   }   
   private void applyFilter(Filter filter)   
   {   
    if(currentImage != null) {   
     filter.apply(currentImage);   
     frame.repaint();   
     showStatus("Applied: " + filter.getName());   
    }   
    else {   
     showStatus("No image loaded.");   
    }   
   }   
   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;   
   }   
   private void makeFrame()   
   {   
    frame = new JFrame("ImageViewer");   
    Container contentPane = frame.getContentPane();   
    makeMenuBar(frame);   
    contentPane.setLayout(new BorderLayout(6, 6));   
    filenameLabel = new JLabel();   
    contentPane.add(filenameLabel, BorderLayout.NORTH);   
    imagePanel = new ImagePanel();   
    contentPane.add(imagePanel, BorderLayout.CENTER);   
    statusLabel = new JLabel(VERSION);   
    contentPane.add(statusLabel, BorderLayout.SOUTH);     
    showFilename(null);   
    frame.pack();   
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();   
    frame.setLocation(d.width/2 - frame.getWidth()/2, d.height/2 - frame.getHeight()/2);   
    frame.setVisible(true);   
   }   
   private void makeMenuBar(JFrame frame)   
   {   
    final int SHORTCUT_MASK =   
     Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();   
    JMenuBar menubar = new JMenuBar();   
    frame.setJMenuBar(menubar);   
    JMenu menu;   
    JMenuItem item;   
    menu = new JMenu("File");   
    menubar.add(menu);   
    item = new JMenuItem("Open");   
     item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, SHORTCUT_MASK));   
     item.addActionListener(new ActionListener()    
     {   
     public void actionPerformed(ActionEvent e) { openFile(); }   
     });   
    menu.add(item);   
    item = new JMenuItem("Close");   
     item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_W, SHORTCUT_MASK));   
     item.addActionListener(new ActionListener()    
     {   
     public void actionPerformed(ActionEvent e) { close(); }   
     });   
    menu.add(item);   
    menu.addSeparator();     
    item = new JMenuItem("Quit");   
     item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, SHORTCUT_MASK));   
     item.addActionListener(new ActionListener()    
     {   
     public void actionPerformed(ActionEvent e) { quit(); }   
     });   
    menu.add(item);   
    menu = new JMenu("Filter");   
    menubar.add(menu);     
    for(final Filter filter : filters) {   
     item = new JMenuItem(filter.getName());   
     item.addActionListener(new ActionListener()    
     {   
     public void actionPerformed(ActionEvent e) {    
       applyFilter(filter);   
       }   
     });   
     menu.add(item);   
    }   
    menu = new JMenu("Help");   
    menubar.add(menu);     
    item = new JMenuItem("About ImageViewer...");   
     item.addActionListener(new ActionListener()    
     {   
     public void actionPerformed(ActionEvent e) { showAbout(); }   
     });   
    menu.add(item);   
   }   
  }   

2. Class Image Panel

import java.awt.*;   
  import javax.swing.*;   
  import java.awt.image.*;   
  /**   
  * Class Image Panel  
  * Nama : Putri Endah Puspitasari  
  * NRP : 05111740000039  
  * Kelas: PBO - B  
  * Senin, 27 November 2018   
  */   
  public class ImagePanel extends JComponent   
  {   
   private int width, height;   
   private OFImage panelImage;   
   public ImagePanel()   
   {   
    width = 360;    
    height = 240;   
    panelImage = null;   
   }   
   public void setImage(OFImage image)   
   {   
    if(image != null) {   
     width = image.getWidth();   
     height = image.getHeight();   
     panelImage = image;   
     repaint();   
    }   
   }   
   public void clearImage()   
   {   
    Graphics imageGraphics = panelImage.getGraphics();   
    imageGraphics.setColor(Color.LIGHT_GRAY);   
    imageGraphics.fillRect(0, 0, width, height);   
    repaint();   
   }   
   public Dimension getPreferredSize()   
   {   
    return new Dimension(width, height);   
   }   
   public void paintComponent(Graphics g)   
   {   
    Dimension size = getSize();   
    g.clearRect(0, 0, size.width, size.height);   
    if(panelImage != null) {   
     g.drawImage(panelImage, 0, 0, null);   
    }   
   }   
  }   

3. Class OF Image

 import java.awt.*;   
  import java.awt.image.*;   
  import javax.swing.*;   
  /**   
  * Class OF Image  
  * Nama : Putri Endah Puspitasari  
  * NRP : 05111740000039  
  * Kelas: PBO - B  
  * Senin, 27 November 2018  
  */   
  public class OFImage extends BufferedImage   
  {   
   public OFImage(BufferedImage image)   
   {   
    super(image.getColorModel(), image.copyData(null),    
      image.isAlphaPremultiplied(), null);   
   }   
   public OFImage(int width, int height)   
   {   
    super(width, height, TYPE_INT_RGB);   
   }   
   public void setPixel(int x, int y, Color col)   
   {   
    int pixel = col.getRGB();   
    setRGB(x, y, pixel);   
   }   
   public Color getPixel(int x, int y)   
   {   
    int pixel = getRGB(x, y);   
    return new Color(pixel);   
   }   
  }   

4. Class Image File Manager


 import java.awt.image.*;   
  import javax.imageio.*;   
  import java.io.*;   
  /**   
  * Class Image File Manager  
  * Nama : Putri Endah Puspitasari  
  * NRP : 05111740000039  
  * Kelas: PBO - B  
  * Senin, 27 November 2018   
  */   
  public class ImageFileManager   
  {   
   private static final String IMAGE_FORMAT = "jpg";   
   public static OFImage loadImage(File imageFile)   
   {   
    try {   
     BufferedImage image = ImageIO.read(imageFile);   
     if(image == null || (image.getWidth(null) < 0)) {   
      return null;   
     }   
     return new OFImage(image);   
    }   
    catch(IOException exc) {   
     return null;   
    }   
   }   
   public static void saveImage(OFImage image, File file)   
   {   
    try {   
     ImageIO.write(image, IMAGE_FORMAT, file);   
    }   
    catch(IOException exc) {   
     return;   
    }   
   }   
  }   

5. Class Filter


 /**   
  * Class Filter  
  * Nama : Putri Endah Puspitasari  
  * NRP : 05111740000039  
  * Kelas: PBO - B  
  * Senin, 27 November 2018  
  */   
  public abstract class Filter   
  {   
   private String name;   
   public Filter(String name)   
   {   
    this.name = name;   
   }   
   public String getName()   
   {   
    return name;   
   }   
   public abstract void apply(OFImage image);   
  }   

6. Class Threshold Filter


 import java.awt.Color;   
  /**   
  * Class Threshold Filter  
  * Nama : Putri Endah Puspitasari  
  * NRP : 05111740000039  
  * Kelas: PBO - B  
  * Senin, 27 November 2018  
  */   
  public class ThresholdFilter extends Filter   
  {   
   public ThresholdFilter(String name)   
   {   
    super(name);   
   }   
   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);   
      }   
     }   
    }   
   }   
  }   

7. Class Lighter Filter


 /**   
  * Class Lighter Filter  
  * Nama : Putri Endah Puspitasari  
  * NRP : 05111740000039  
  * Kelas: PBO - B  
  * Senin, 27 November 2018  
  */   
  public class LighterFilter extends Filter   
  {   
   public LighterFilter(String name)   
   {   
    super(name);   
   }   
   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());   
     }   
    }   
   }   
  }   

8. Class Darker Filter

  /**   
  * Class Darker Filter  
  * Nama : Putri Endah Puspitasari  
  * NRP : 05111740000039  
  * Kelas: PBO - B  
  * Senin, 27 November 2018  
  */   
  public class DarkerFilter extends Filter   
  {   
   public DarkerFilter(String name)   
   {   
    super(name);   
   }   
   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());   
     }   
    }   
   }   
  }   

Kemudian langkah langkah untuk menampilkan gambar nya yaitu yg pertama dengan klik Image View nya kemudian pilih New, maka akan muncul gambar di bawah ini untuk memilih gambar yang akan di tampilkan 


Menampilkan gambar aslinya


Tampilan saat menggunakan Darker Filter


Tampilan saat menggunakan Lighter Filter


Tampilan saat menggunakan Threshold Filter


Sekian dan Terimakasih
:)
Semoga Bermanfaat








Komentar

Postingan populer dari blog ini

Tugas Rumah Database Akademik

Foxes and Rabbits Project

PB0-B Class dan Object studi kasus Ticket Machine