Langsung ke konten utama

Image Viewer

Dalam program ini terdapat 4 Class, yaitu:
1. ImageViewer
2. ImagePanel
3. OFImage
4. Image File Manager

Berikut adalah tampilan hubungan tiap class di BlueJ.

Berikut adalah source code tiap classnya.
1. ImageViewer
 /**  
  * Write a description of class ImageViewer here.  
  *  
  * @author (your name)  
  * @version (a version number or a date)  
  */  
 import java.awt.*;  
 import java.awt.event.*;  
 import java.awt.image.*;  
 import javax.swing.*;  
 import java.io.File;  
 public class ImageViewer  
 {  
   private static final String VERSION = "Version 1.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;  
   public ImageViewer()  
   {  
     currentImage = null;  
     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 makeDarker()  
   {  
     if(currentImage != null)  
     {  
       currentImage.darker();  
       frame.repaint();  
       showStatus("Applied: darker");  
     }  
     else  
     {  
       showStatus("No image loaded.");  
     }  
   }  
   private void makeLighter()  
   {  
     if(currentImage != null)  
     {  
       currentImage.lighter();  
       frame.repaint();  
       showStatus("Applied: lighter");  
     }  
     else  
     {  
       showStatus("No image loaded.");  
     }  
   }  
   private void threshold()  
   {  
     if(currentImage!=null)  
     {  
       currentImage.threshold();  
       frame.repaint();  
       showStatus("Applied: threshold");  
     }  
     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 void makeFrame()    
   {    
     frame = new JFrame("ImageViewer");    
     makeMenuBar(frame);    
     Container contentPane = frame.getContentPane();    
     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);    
     item = new JMenuItem("Darker");    
     item.addActionListener(new ActionListener()  
     {    
       public void actionPerformed(ActionEvent e) { makeDarker(); }    
     });  
     menu.add(item);    
     item = new JMenuItem("Lighter");    
     item.addActionListener(new ActionListener()  
     {    
       public void actionPerformed(ActionEvent e) { makeLighter(); }    
     });    
     menu.add(item);    
     item = new JMenuItem("Threshold");    
     item.addActionListener(new ActionListener()  
     {    
       public void actionPerformed(ActionEvent e) { threshold(); }    
     });    
     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. ImagePanel
 /**  
  * Write a description of class ImagePanel here.  
  *  
  * @author (your name)  
  * @version (a version number or a date)  
  */  
 import java.awt.*;    
  import javax.swing.*;    
  import java.awt.image.*;    
  public class ImagePanel extends JComponent    
  {   
   // The current width and height of this panel    
   private int width, height;    
   // An internal image buffer that is used for painting. For    
   // actual display, this image buffer is then copied to screen.    
   private OFImage panelImage;    
   /**    
   * Create a new, empty ImagePanel.    
   */    
   public ImagePanel()    
   {    
   width = 360; // arbitrary size for empty panel    
   height = 240;    
   panelImage = null;    
   }    
   /**    
   * Set the image that this panel should show.    
   *    
   * @param image The image to be displayed.    
   */    
   public void setImage(OFImage image)    
   {    
   if(image != null) {    
    width = image.getWidth();    
    height = image.getHeight();    
    panelImage = image;    
    repaint();    
   }    
   }    
   /**    
   * Clear the image on this panel.    
   */    
   public void clearImage()    
   {    
   Graphics imageGraphics = panelImage.getGraphics();    
   imageGraphics.setColor(Color.LIGHT_GRAY);    
   imageGraphics.fillRect(0, 0, width, height);    
   repaint();    
   }    
   // The following methods are redefinitions of methods    
   // inherited from superclasses.    
   /**    
   * Tell the layout manager how big we would like to be.    
   * (This method gets called by layout managers for placing    
   * the components.)    
   *    
   * @return The preferred dimension for this component.    
   */    
   public Dimension getPreferredSize()    
   {    
   return new Dimension(width, height);    
   }    
   /**    
   * This component needs to be redisplayed. Copy the internal image    
   * to screen. (This method gets called by the Swing screen painter    
   * every time it want this component displayed.)    
   *    
   * @param g The graphics context that can be used to draw on this component.    
   */    
   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. OFImage
 /**  
  * Write a description of class ImageFileManager here.  
  *  
  * @author (your name)  
  * @version (a version number or a date)  
  */  
  import java.awt.*;    
  import java.awt.image.*;    
  import javax.swing.*;    
  public class OFImage extends BufferedImage    
  {   
   /**    
   * Create an OFImage copied from a BufferedImage.    
   * @param image The image to copy.    
   */    
   public OFImage(BufferedImage image)    
   {    
   super(image.getColorModel(), image.copyData(null),    
    image.isAlphaPremultiplied(), null);    
   }    
   /**    
   * Create an OFImage with specified size and unspecified content.    
   * @param width The width of the image.    
   * @param height The height of the image.    
   */    
   public OFImage(int width, int height)    
   {    
   super(width, height, TYPE_INT_RGB);    
   }    
   /**    
   * Set a given pixel of this image to a specified color. The    
   * color is represented as an (r,g,b) value.    
   * @param x The x position of the pixel.    
   * @param y The y position of the pixel.    
   * @param col The color of the pixel.    
   */    
   public void setPixel(int x, int y, Color col)    
   {    
   int pixel = col.getRGB();    
   setRGB(x, y, pixel);    
   }    
   /**    
   * Get the color value at a specified pixel position.    
   * @param x The x position of the pixel.    
   * @param y The y position of the pixel.    
   * @return The color of the pixel at the given position.    
   */    
   public Color getPixel(int x, int y)    
   {    
   int pixel = getRGB(x, y);    
   return new Color(pixel);    
   }    
   /**    
   * Make this image a bit darker.    
   */    
   public void darker()    
   {    
   int height = getHeight();    
   int width = getWidth();    
   for(int y = 0; y < height; y++) {    
    for(int x = 0; x < width; x++) {    
    setPixel(x, y, getPixel(x, y).darker());    
    }    
   }    
   }    
   /**    
   * Make this image a bit lighter.    
   */    
   public void lighter()    
   {    
   int height = getHeight();    
   int width = getWidth();    
   for(int y = 0; y < height; y++) {    
    for(int x = 0; x < width; x++) {    
    setPixel(x, y, getPixel(x, y).brighter());    
    }    
   }    
   }    
   /**    
   * Perform a three level threshold operation.    
   * That is: repaint the image with only three color values:    
   *  white, gray, and black.    
   */    
   public void threshold()    
   {    
   int height = getHeight();    
   int width = getWidth();    
   for(int y = 0; y < height; y++) {    
    for(int x = 0; x < width; x++) {    
    Color pixel = getPixel(x, y);    
    int brightness = (pixel.getRed() + pixel.getBlue() + pixel.getGreen()) / 3;    
    if(brightness <= 85) {    
     setPixel(x, y, Color.BLACK);    
    }    
    else if(brightness <= 170) {    
     setPixel(x, y, Color.GRAY);    
    }    
    else {    
     setPixel(x, y, Color.WHITE);    
    }    
    }    
   }    
   }    
  }   

4. Image File Manager
 /**  
  * Write a description of class FileManager here.  
  *  
  * @author (your name)  
  * @version (a version number or a date)  
  */  
  import java.awt.image.*;    
  import javax.imageio.*;    
  import java.io.*;    
  public class ImageFileManager   
  {   
   // A constant for the image format that this writer uses for writing.    
   // Available formats are "jpg" and "png".    
   private static final String IMAGE_FORMAT = "jpg";    
   /**    
   * Read an image file from disk and return it as an image. This method    
   * can read JPG and PNG file formats. In case of any problem (e.g the file    
   * does not exist, is in an undecodable format, or any other read error)    
   * this method returns null.    
   *    
   * @param imageFile The image file to be loaded.    
   * @return  The image object or null is it could not be read.    
   */    
   public static OFImage loadImage(File imageFile)    
   {    
   try {    
    BufferedImage image = ImageIO.read(imageFile);    
    if(image == null || (image.getWidth(null) < 0)) {    
    // we could not load the image - probably invalid file format    
    return null;    
    }    
    return new OFImage(image);    
   }    
   catch(IOException exc) {    
    return null;    
   }    
   }    
   /**    
   * Write an image file to disk. The file format is JPG. In case of any    
   * problem the method just silently returns.    
   *    
   * @param image The image to be saved.    
   * @param file The file to save to.    
   */    
   public static void saveImage(OFImage image, File file)    
   {    
   try {    
    ImageIO.write(image, IMAGE_FORMAT, file);    
   }    
   catch(IOException exc) {    
    return;    
   }    
   }    
  }   

Berikut adalah hasilnya.
Setelah gambar di load.
Setelah gambar di filter darker.
Setelah gambar di filter lighter.
Setelah gambar di filter threshold.

Sekian dan terima kasih,

Komentar