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

Postingan populer dari blog ini

Analisa Sistem Informasi Traveloka

Tugas 1 Ahmad Syauqi 05111740000093 APSI - C Pada kesempatan kali ini saya akan membahas tentang bagaimana Sistem Informasi pada sebuah platform yang pastinya sudah tidak asing lagi di telinga kita semua, yaitu Traveloka. 1. Sejarah Singkat Traveloka Awalnya Traveloka  adalah perusahaan yang menyediakan layanan pemesanan  tiket pesawat  dan  hotel  secara daring dengan fokus perjalanan domestik di  Indonesia, namun seiring dengan berjalannya waktu, kini Traveloka juga menyediakan layanan pemesanan tiker kereta api, bus, rental mobil, rekreasi, dan masih banyak lainnya.  Traveloka memiliki basis operasional di  Jakarta . Traveloka didirikan pada tahun  2012   oleh   Ferry Unardi , Derianto Kusuma, dan Albert Zhang. Ide ini muncul disaat Ferry Unardi sering mengalami kesulitan dalam pemesanan pesawat, terutama disaat dia ingin pulang ke   Padang , Indonesia, dari Amerika Serikat. Pada awal konsepnya Traveloka berfungsi sebagai mesin pencari untuk membandingkan harg

Tugas APSI - Use Case Diagram

Nama : Ahmad Syauqi NRP : 05111740000093 Use Case Diagram adalah gambaran graphical dari beberapa atau semua actor, use case, dan interaksi diantaranya yang memperkenalkan suatu sistem. Use case diagram tidak menjelaskan secara detil tentang penggunaan use case, tetapi hanya memberi gambaran singkat hubungan antara usecase, aktor, dan sistem. Berikut adalah contoh use case diagram dari sistem penggajian di Kanisius

UTS-PBO-B-2018 Sistem Parkir Elektronik

Pada UTS PBO B pada tanggal 15 Oktober 2018, kami ditugaskan untuk membuat program Sistem Parkir Elektronik pada soal nomor 5. Berikut adalah hasil dan source code nya. 1. Class main /** * Write a description of class Main here. * * @author (your name) * @version (a version number or a date) */ import java.util.Scanner; public class Main { public static void main(String args[]) { Scanner scan = new Scanner(System.in); int menu=0; String nopol; int price; PrintMasuk masuk = new PrintMasuk(); System.out.println("Masukkan Nomor Polisi Kendaraan Anda"); nopol=masuk.getNopol(); price=masuk.getPrice(); while(menu!=2) { System.out.println("1. Cetak Bukti Masuk"); System.out.println("2. Cetak Resi Keluar"); menu=scan.nextInt(); switch(menu) { case 1: masuk.printMasuk(); break