PBO TUGAS 7 : IMAGE VIEWER

  Pada pertemuan kali ini saya dan teman-teman diberikan tugas oleh pak Fajar Baskoro untuk membuat sebuah aplikasi Image Viewer yang memilki beberapa filter untuk mengubah sebuah foto yang kita inputkan. Dalam pembuatan aplikasi ini digunakan 4 class dalam implementasinya yaitu : 

1. Class ImageViewer : Class utama untuk menampilkan gambar / foto yang kita inputkan 

2. Class ImagePanel : Class yang merupakan komponen swing untuk menampilkan OFImage

3. Class ImageFileManager : Class untuk memuat dan menyimpan gambar / foto 

4. Class OFImage : Class untuk menjelaskan gambar dengan format OF

berikut adalah implementasi diagram class yang telah dibuat : 




Berikut Ini adalah hasil dari program yang telah dibuat :





Di bawah ini adalah Source Code Dari Program diatas :


1.    ImageViewer

DATA HOSTED WITH ♥ BY PASTEBIN.COM - DOWNLOAD RAW - SEE ORIGINAL
  1.  
  2. /**
  3.  * Write a description of class ImageViewer here.
  4.  *
  5.  * @author (Fais Rafii)
  6.  * @version (7.12)
  7.  */
  8. import java.awt.*;
  9. import java.awt.event.*;
  10. import java.awt.image.*;
  11. import javax.swing.*;
  12. import java.io.File;
  13.  
  14. public class ImageViewer
  15. {
  16.     private static final String VERSION = "Version 1.0";
  17.     private static JFileChooser fileChooser = new JFileChooser(System.getProperty("user.dir"));
  18.     private JFrame frame;
  19.     private ImagePanel imagePanel;
  20.     private JLabel filenameLabel;
  21.     private JLabel statusLabel;
  22.     private OFImage currentImage;
  23.  
  24.     public ImageViewer()
  25.     {
  26.         currentImage = null;
  27.         makeFrame();
  28.     }
  29.  
  30.     private void openFile()
  31.     {
  32.         int returnVal = fileChooser.showOpenDialog(frame);
  33.         if (returnVal != JFileChooser.APPROVE_OPTION)
  34.         {
  35.             return;
  36.         }
  37.         File selectedFile = fileChooser.getSelectedFile();
  38.         currentImage = ImageFileManager.loadImage(selectedFile);
  39.         if (currentImage == null)
  40.         {
  41.             JOptionPane.showMessageDialog(frame, "The file was not in a recognized image file format.",
  42.                     "Image Load Error"JOptionPane.ERROR_MESSAGE);
  43.             return;
  44.         }
  45.         imagePanel.setImage(currentImage);
  46.         showFilename(selectedFile.getPath());
  47.         showStatus("File loaded.");
  48.         frame.pack();
  49.     }
  50.  
  51.     private void close()
  52.     {
  53.         currentImage = null;
  54.         imagePanel.clearImage();
  55.         showFilename(null);
  56.     }
  57.  
  58.     private void quit()
  59.     {
  60.         System.exit(0);
  61.     }
  62.  
  63.     private void makeDarker()
  64.     {
  65.         if (currentImage != null)
  66.         {
  67.             currentImage.darker();
  68.             frame.repaint();
  69.             showStatus("Applied: darker");
  70.         }
  71.         else
  72.         {
  73.             showStatus("No image loaded.");
  74.         }
  75.     }
  76.  
  77.     private void makeLighter()
  78.     {
  79.         if (currentImage != null)
  80.         {
  81.             currentImage.lighter();
  82.             frame.repaint();
  83.             showStatus("Applied: lighter");
  84.         }
  85.         else
  86.         {
  87.             showStatus("No image loaded.");
  88.         }
  89.     }
  90.  
  91.     private void threshold()
  92.     {
  93.         if (currentImage != null)
  94.         {
  95.             currentImage.threshold();
  96.             frame.repaint();
  97.             showStatus("Applied: threshold");
  98.         }
  99.         else
  100.         {
  101.             showStatus("No image loaded.");
  102.         }
  103.     }
  104.  
  105.     private void showAbout()
  106.     {
  107.         JOptionPane.showMessageDialog(frame, "ImageViewer\n" + VERSION, "About ImageViewer",
  108.                 JOptionPane.INFORMATION_MESSAGE);
  109.     }
  110.  
  111.     private void showFilename(String filename)
  112.     {
  113.         if (filename == null)
  114.         {
  115.             filenameLabel.setText("No file displayed.");
  116.         }
  117.         else
  118.         {
  119.             filenameLabel.setText("File: " + filename);
  120.         }
  121.     }
  122.  
  123.     private void showStatus(String text)
  124.     {
  125.         statusLabel.setText(text);
  126.     }
  127.  
  128.     private void makeFrame()
  129.     {
  130.         frame = new JFrame("ImageViewer");
  131.         makeMenuBar(frame);
  132.         Container contentPane = frame.getContentPane();
  133.         contentPane.setLayout(new BorderLayout(66));
  134.         filenameLabel = new JLabel();
  135.         contentPane.add(filenameLabel, BorderLayout.NORTH);
  136.         imagePanel = new ImagePanel();
  137.         contentPane.add(imagePanel, BorderLayout.CENTER);
  138.         statusLabel = new JLabel(VERSION);
  139.         contentPane.add(statusLabel, BorderLayout.SOUTH);
  140.         showFilename(null);
  141.         frame.pack();
  142.         Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
  143.         frame.setLocation(d.width / 2 - frame.getWidth() / 2, d.height / 2 - frame.getHeight() / 2);
  144.         frame.setVisible(true);
  145.     }
  146.  
  147.     private void makeMenuBar(JFrame frame)
  148.     {
  149.         final int SHORTCUT_MASK = Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();
  150.         JMenuBar menubar = new JMenuBar();
  151.         frame.setJMenuBar(menubar);
  152.         JMenu menu;
  153.         JMenuItem item;
  154.         menu = new JMenu("File");
  155.         menubar.add(menu);
  156.         item = new JMenuItem("Open");
  157.         item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, SHORTCUT_MASK));
  158.         item.addActionListener(new ActionListener()
  159.         {
  160.             public void actionPerformed(ActionEvent e)
  161.             {
  162.                 openFile();
  163.             }
  164.         });
  165.         menu.add(item);
  166.         item = new JMenuItem("Close");
  167.         item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_W, SHORTCUT_MASK));
  168.         item.addActionListener(new ActionListener()
  169.         {
  170.             public void actionPerformed(ActionEvent e)
  171.             {
  172.                 close();
  173.             }
  174.         });
  175.         menu.add(item);
  176.         menu.addSeparator();
  177.         item = new JMenuItem("Quit");
  178.         item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, SHORTCUT_MASK));
  179.         item.addActionListener(new ActionListener()
  180.         {
  181.             public void actionPerformed(ActionEvent e)
  182.             {
  183.                 quit();
  184.             }
  185.         });
  186.         menu.add(item);
  187.         menu = new JMenu("Filter");
  188.         menubar.add(menu);
  189.         item = new JMenuItem("Darker");
  190.         item.addActionListener(new ActionListener()
  191.         {
  192.             public void actionPerformed(ActionEvent e)
  193.             {
  194.                 makeDarker();
  195.             }
  196.         });
  197.         menu.add(item);
  198.         item = new JMenuItem("Lighter");
  199.         item.addActionListener(new ActionListener()
  200.         {
  201.             public void actionPerformed(ActionEvent e)
  202.             {
  203.                 makeLighter();
  204.             }
  205.         });
  206.         menu.add(item);
  207.         item = new JMenuItem("Threshold");
  208.         item.addActionListener(new ActionListener()
  209.         {
  210.             public void actionPerformed(ActionEvent e)
  211.             {
  212.                 threshold();
  213.             }
  214.         });
  215.         menu.add(item);
  216.         menu = new JMenu("Help");
  217.         menubar.add(menu);
  218.         item = new JMenuItem("About ImageViewer...");
  219.         item.addActionListener(new ActionListener()
  220.         {
  221.             public void actionPerformed(ActionEvent e)
  222.             {
  223.                 showAbout();
  224.             }
  225.         });
  226.         menu.add(item);
  227.     }
  228. }


2.    ImageFileManager

DATA HOSTED WITH ♥ BY PASTEBIN.COM - DOWNLOAD RAW - SEE ORIGINAL
  1.  
  2. /**
  3.  * Write a description of class ImageFileManager here.
  4.  *
  5.  * @author (Aristya)
  6.  * @version (7.12)
  7.  */
  8. import java.awt.image.*;
  9. import javax.imageio.*;
  10. import java.io.*;
  11. import java.util.*;
  12.  
  13. public class ImageFileManager {
  14.     private static final String IMAGE_FORMAT = "jpg";
  15.  
  16.     public static OFImage loadImage(File imageFile)
  17.     {
  18.         try
  19.         {
  20.             BufferedImage image = ImageIO.read(imageFile);
  21.             if (image == null || image.getWidth(null) < 0)
  22.             {
  23.                 return null;
  24.             }
  25.             return new OFImage(image);
  26.         }
  27.        
  28.         catch (IOException exc)
  29.         {
  30.             return null;
  31.         }
  32.     }
  33.  
  34.     public static void saveImage(OFImage image, File file)
  35.     {
  36.         try
  37.         {
  38.             ImageIO.write(image, IMAGE_FORMAT, file);
  39.         }
  40.         catch (IOException exc)
  41.         {
  42.             return;
  43.         }
  44.     }
  45. }

3.    OFImage

DATA HOSTED WITH ♥ BY PASTEBIN.COM - DOWNLOAD RAW - SEE ORIGINAL
  1.  
  2. /**
  3.  * Write a description of class OFImage here.
  4.  *
  5.  * @author (Aristya)
  6.  * @version (7.12)
  7.  */
  8. import java.awt.*;
  9. import java.awt.image.*;
  10. import javax.swing.*;
  11.  
  12. public class OFImage extends BufferedImage
  13. {
  14.     public OFImage(BufferedImage image)
  15.     {
  16.         super(image.getColorModel(), image.copyData(null), image.isAlphaPremultiplied()null);
  17.     }
  18.  
  19.     public OFImage(int width, int height)
  20.     {
  21.         super(width, height, TYPE_INT_RGB);
  22.     }
  23.  
  24.     public void setPixel(int x, int y, Color warna)
  25.     {
  26.         int pixel = warna.getRGB();
  27.         setRGB(x, y, pixel);
  28.     }
  29.  
  30.     public Color getPixel(int x, int y)
  31.     {
  32.         int pixel = getRGB(x, y);
  33.         return new Color(pixel);
  34.     }
  35.  
  36.     public void darker() {
  37.         int height = getHeight();
  38.         int width = getWidth();
  39.         for (int i = 0; i < height; i++)
  40.         {
  41.             for (int j = 0; j < width; j++)
  42.             {
  43.                 setPixel(j, i, getPixel(j, i).darker());
  44.             }
  45.         }
  46.     }
  47.  
  48.     public void lighter()
  49.     {
  50.         int height = getHeight();
  51.         int width = getWidth();
  52.         for (int i = 0; i < height; i++)
  53.         {
  54.             for (int j = 0; j < width; j++)
  55.             {
  56.                 setPixel(j, i, getPixel(j, i).brighter());
  57.             }
  58.         }
  59.     }
  60.  
  61.     public void threshold()
  62.     {
  63.         int height = getHeight();
  64.         int width = getWidth();
  65.         for (int i = 0; i < height; i++)
  66.         {
  67.             for (int j = 0; j < width; j++)
  68.             {
  69.                 Color pixel = getPixel(j, i);
  70.                 int brightness = (pixel.getRed() + pixel.getBlue() + pixel.getGreen()) / 3;
  71.                 if (brightness <= 85)
  72.                 {
  73.                     setPixel(j, i, Color.BLACK);
  74.                 }
  75.                 else if (brightness <= 85 * 2)
  76.                 {
  77.                     setPixel(j, i, Color.GRAY);
  78.                 }
  79.                 else
  80.                 {
  81.                     setPixel(j, i, Color.WHITE);
  82.                 }
  83.             }
  84.         }
  85.     }
  86. }

4.    ImagePanel. 

DATA HOSTED WITH ♥ BY PASTEBIN.COM - DOWNLOAD RAW - SEE ORIGINAL
  1.  
  2. /**
  3.  * Write a description of class ImagePanel here.
  4.  *
  5.  * @author (Aristya)
  6.  * @version (7.12)
  7.  */
  8. import java.awt.*;
  9. import javax.swing.*;
  10. import java.awt.image.*;
  11.  
  12. public class ImagePanel extends JComponent
  13. {
  14.     private int width, height;
  15.     private OFImage panelImage;
  16.  
  17.     public ImagePanel()
  18.     {
  19.         width = 360;
  20.         height = 240;
  21.         panelImage = null;
  22.     }
  23.  
  24.     public void setImage(OFImage image)
  25.     {
  26.         if (image != null)
  27.         {
  28.             width = image.getWidth();
  29.             height = image.getHeight();
  30.             panelImage = image;
  31.             repaint();
  32.         }
  33.     }
  34.  
  35.     public void clearImage()
  36.     {
  37.         Graphics imageGraphics = panelImage.getGraphics();
  38.         imageGraphics.setColor(Color.LIGHT_GRAY);
  39.         imageGraphics.fillRect(00, width, height);
  40.         repaint();
  41.     }
  42.  
  43.     public Dimension getPreferredSize()
  44.     {
  45.         return new Dimension(width, height);
  46.     }
  47.  
  48.     public void paintComponent(Graphics g)
  49.     {
  50.         Dimension size = getSize();
  51.         g.clearRect(00, size.width, size.height);
  52.         if (panelImage != null)
  53.         {
  54.             g.drawImage(panelImage, 00null);
  55.         }
  56.     }