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 :
1. ImageViewer
- /**
- * Write a description of class ImageViewer here.
- *
- * @author (Fais Rafii)
- * @version (7.12)
- */
- 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. ImageFileManager
- /**
- * Write a description of class ImageFileManager here.
- *
- * @author (Aristya)
- * @version (7.12)
- */
- import java.awt.image.*;
- import javax.imageio.*;
- import java.io.*;
- import java.util.*;
- 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;
- }
- }
- }
3. OFImage
- /**
- * Write a description of class OFImage here.
- *
- * @author (Aristya)
- * @version (7.12)
- */
- import java.awt.*;
- import java.awt.image.*;
- import javax.swing.*;
- 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 warna)
- {
- int pixel = warna.getRGB();
- setRGB(x, y, pixel);
- }
- public Color getPixel(int x, int y)
- {
- int pixel = getRGB(x, y);
- return new Color(pixel);
- }
- public void darker() {
- int height = getHeight();
- int width = getWidth();
- for (int i = 0; i < height; i++)
- {
- for (int j = 0; j < width; j++)
- {
- setPixel(j, i, getPixel(j, i).darker());
- }
- }
- }
- public void lighter()
- {
- int height = getHeight();
- int width = getWidth();
- for (int i = 0; i < height; i++)
- {
- for (int j = 0; j < width; j++)
- {
- setPixel(j, i, getPixel(j, i).brighter());
- }
- }
- }
- public void threshold()
- {
- int height = getHeight();
- int width = getWidth();
- for (int i = 0; i < height; i++)
- {
- for (int j = 0; j < width; j++)
- {
- Color pixel = getPixel(j, i);
- int brightness = (pixel.getRed() + pixel.getBlue() + pixel.getGreen()) / 3;
- if (brightness <= 85)
- {
- setPixel(j, i, Color.BLACK);
- }
- else if (brightness <= 85 * 2)
- {
- setPixel(j, i, Color.GRAY);
- }
- else
- {
- setPixel(j, i, Color.WHITE);
- }
- }
- }
- }
- }
4. ImagePanel.
- /**
- * Write a description of class ImagePanel here.
- *
- * @author (Aristya)
- * @version (7.12)
- */
- import java.awt.*;
- import javax.swing.*;
- import java.awt.image.*;
- 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);
- }
- }
- Dapatkan link
- X
- Aplikasi Lainnya