Jumat, 22 Maret 2019

Tugas APSI - C

USE CASE

Analisa Use Case adalah teknik yang digunakan untuk mengidentifikasi kebutuhan sistem perangkat lunak dengan menggambarkan aktor atau user yang akan menggunakan perangkat lunak dan ruang lingkup fitur kegunaan perangkat lunak.

Berikut adalah analisa usecase dari "Penerbitan Kanikus" dimana terbagi menjadi 6 aktor yaitu :

1. Personalia
2. Kasir
3. Keuangan
4. Karyawan
5. Pencatat waktu/keamanan
6. Gaji/penggajian 




Use case description :
oleh :
1. Mohammad Rizaldi H P 05111740000024
2. Yasinta Yusniawati 05111740000054
3. Ahmad Syauqi 05111740000093
4. Bobbi Aditya 05111740000099
  • Perekrutan karyawan

  • Pemutusan hubungan kerja



  • Mutasi kerja

  • Mencatat waktu hadir karyawan


  • Menghitung penghasilan karyawan

  • Pembayaran gaji karyawan


  • Memverifikasi kas keluar






Senin, 11 Februari 2019

Analisis dan Perancangan Sistem Informasi

Sistem Informasi "garuda-indonesia.com"


garuda-indonesia.com adalah salah contoh sistem informasi di bidang penerbangan yang menyediakan layanan penjualan tiket pesawat secara online sehingga penumpang pesawat bisa langsung memesan atau membeli tiket secara online tanpa harus ke bandara.


halaman utama website garuda-indonesia


Fitur dalam garuda-indonesia :





Fitur utama :


1. Book & trip
Calon penumpang pesawat bisa lansung booking dan membeli tiket pesawat, memesan hotel dan taxi
Terdapat subfitur lagi yaiu :
  • Penerbangan :  mencari dan memesan tiket pesawat
  • Hotel: memilih hotel dan booking hotel
  • Cars : menyewa mobil


2. Check In
Melakukan check in dan mengetahui persyaratan dokumen yang di butuhkan seperti passport/visa




3. Perjalanan Saya
  • Manajemen My Booking seperti cek informasi reservasi, memilih kursi, memesan makan, bagasi tambahan danjadwal ulang penerbangan
  • BidUpgrade  digunakan untuk pindah kelas penerbangan

4. Lacak Bagasi
Mengetahui informasi mengenasi status bagasi penumpang dengan memasukkan nama dan nomer referensi yang telah disediakan saat melakukan pelaporan




Fitur informasi :
  • Discover, memberkan informasi yang di tawarkan oleh maskapai seperti destinasi , inflight magazine dan rute
  • Experience, memberikan informasi mengenai konsep layanan dalam pesawat dan skypriority
  • Penawaran, memeberikan penawaran kepada penumpang pesawat  seperti promo, sewa mobil, pesan hotel dan bidUpgrade



Fitur user
Masuk/daftar : mendaftarkan akun dan masuk jika sudah memikiki akun





Klasifikasi Fitur Aplikasi
  • Teknologi End User : Aplikasi android, iOs dan website resmi 
  • Teknologi Database : cloud computing
  • Pembayaran : Visa, atm, indomart, dan e-pay
  • Keamanan transaksi : digicart






SISTEM INFORMASI UNTUK BISNIS

Transaction processing systems
Untuk melakukan transaksi pada garuda-indonesia penumpang diharuskan untuk login, dimana system informasi booking dapat di akses ketika sudah login. Transaksi lainnya adalah saat pembayaran



Process control system (PCS)

Syarat dan ketentuan booking dan check in adalah bagian dari system informasi yang menjadi panduan dalam proses booking dan check in


Enterprise collaboration systems (ECS)
Garuda-indonesia memiliki kerjasama dengan bank dan bandara untuk melakukan koordinasi dan pertukaran informasi dalam lingkungan internal. Untuk meningkatkan kenyamanan penumpang, garuda-indonesia memiliki fitur informasi yang berisi informasi penerbangan, rute, fasilitas, tarif, dan denah tempat duduk



SISTEM INFORMASI UNTUK PENGAMBILAN KEPUTUSAN

Management information systems (MIS)
Menyediakan informasi bagi pihak manajemen untuk memonitoring pemasukan, data dan informasi penumpang, status pembayaran, informasi pesawat


Decision support systems (DSS) 
Data yang diperoleh dari mis tadi  dijadikan acuan dalam pengambilan keputusan seperti menambah jumlah pesawat, meningkatkan layanan, menambah kerjasama dengan pihak yang berkaitan dengan pembayaran, serta menambah pengawai.


Executive information systems (EIS)
Garuda-indonesia memanfaatkan system informasi sebagai factor kunci dalam menjalankan tujuan strategis perusaan dengan memberikan kebijakan serta menjalin kerjasama yang lebih luas



Senin, 10 Desember 2018

EAS - PBO B

EAS PBO - IMAGE EDITOR

Nama : Yasinta Yusniawati
NRP : 05111740000054
Kelas : PBO - B


1) RANCANGAN INTERFACE




2) CLASS



Penjelasan :

Class :

  • Class ImageViewer : Untuk menjalankan program dan menggabungkan semua kelas
  • Class ImagePanel: Menampilkan OFImage
  • Class ImageFileManager : Membuka dan menyimpan gambar
  • Semua Filter : Membuat filter gambar sesuai dengan namanya antara lain (DarkerFilter, EdgeFilter, FishEyeFilter, MirrorFilter, LighterFilter, SolarizeFilter, GrayScaleFilter, InvertFilter, ThresholdFilter, SmoothFilter, PixelizeFilter.)
Menu Tools :
  • Add Text : Menambahkan tulisan pada gambar yang sudah di buka
  • Crop : Memotong gambar
Menu Fitur :
  • Rotate : Rotate right 90 drajat, rotate left 90 derajat, dan rotate 180 derajat. Untuk memutar gambar sesuai dengan keinginan
  • Zoom : zoom in (memperbesar gambar) dan zoom out (memperkecil ukuran gambar)

3) IMPLEMENTASI PROGRAM

1. ImageViewer

import java.awt.*;  
 import java.awt.event.*;  
 import java.awt.image.*;  
 import javax.swing.*;  
 import javax.swing.border.*;  
 import java.io.File;  
 import java.util.List;  
 import java.util.ArrayList;  
 import java.util.Iterator;  
 /**  
  * Yasinta Yusniawati
  * 05111740000054
  * PBO - B
  */  
 public class ImageViewer  
 {  
   // static fields:  
   private static final String VERSION = "Version EAS PBO ";  
   private static JFileChooser fileChooser = new JFileChooser(System.getProperty("user.dir"));  
   // fields:  
   private JFrame frame;  
   private ImagePanel imagePanel;  
   private JLabel filenameLabel;  
   private JLabel statusLabel;  
   private JButton smallerButton;  
   private JButton largerButton;  
   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; // cancelled  
     }  
     File selectedFile = fileChooser.getSelectedFile();  
     currentImage = ImageFileManager.loadImage(selectedFile);  
     if(currentImage == null) {  // image file was not a valid image  
       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 saveAs()  
   {  
     if(currentImage != null) {  
       int returnVal = fileChooser.showSaveDialog(frame);  
       if(returnVal != JFileChooser.APPROVE_OPTION) {  
         return; // cancelled  
       }  
       File selectedFile = fileChooser.getSelectedFile();  
       ImageFileManager.saveImage(currentImage, selectedFile);  
       showFilename(selectedFile.getPath());  
     }  
   }  
   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 makeLarger()  
   {  
     if(currentImage != null) {  
       // create new image with double size  
       int width = currentImage.getWidth();  
       int height = currentImage.getHeight();  
       OFImage newImage = new OFImage(width * 2, height * 2);  
       // copy pixel data into new image  
       for(int y = 0; y < height; y++) {  
         for(int x = 0; x < width; x++) {  
           Color col = currentImage.getPixel(x, y);  
           newImage.setPixel(x * 2, y * 2, col);  
           newImage.setPixel(x * 2 + 1, y * 2, col);  
           newImage.setPixel(x * 2, y * 2 + 1, col);  
           newImage.setPixel(x * 2+1, y * 2 + 1, col);  
         }  
       }  
       currentImage = newImage;  
       imagePanel.setImage(currentImage);  
       frame.pack();  
     }  
   }  
   private void makeSmaller()  
   {  
     if(currentImage != null) {  
       // create new image with double size  
       int width = currentImage.getWidth() / 2;  
       int height = currentImage.getHeight() / 2;  
       OFImage newImage = new OFImage(width, height);  
       // copy pixel data into new image  
       for(int y = 0; y < height; y++) {  
         for(int x = 0; x < width; x++) {  
           newImage.setPixel(x, y, currentImage.getPixel(x * 2, y * 2));  
         }  
       }  
       currentImage = newImage;  
       imagePanel.setImage(currentImage);  
       frame.pack();  
     }  
   }  
   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"));  
     filterList.add(new InvertFilter("Invert"));  
     filterList.add(new SolarizeFilter("Solarize"));  
     filterList.add(new SmoothFilter("Smooth"));  
     filterList.add(new PixelizeFilter("Pixelize"));  
     filterList.add(new MirrorFilter("Mirror"));  
     filterList.add(new GrayScaleFilter("Grayscale"));  
     filterList.add(new EdgeFilter("Edge Detection"));  
     filterList.add(new FishEyeFilter("Fish Eye"));  
     return filterList;  
   }  
   private void crop()  
   {  
     if (currentImage != null)  
     {  
       int width = currentImage.getWidth();  
       int height = currentImage.getWidth();  
       int xAwal = Integer.parseInt(JOptionPane.showInputDialog("xAwal"));  
       int yAwal = Integer.parseInt(JOptionPane.showInputDialog("yAwal"));  
       int xAkhir = Integer.parseInt(JOptionPane.showInputDialog("xAkhir"));  
       int yAkhir = Integer.parseInt(JOptionPane.showInputDialog("yAkhir"));  
       OFImage newImage = new OFImage(xAkhir - xAwal, yAkhir - yAwal);  
       for (int y = 0; y < yAkhir - yAwal; y++)  
       {  
         for (int x = 0; x < xAkhir - xAwal; x++)  
         {  
           newImage.setPixel(x, y, currentImage.getPixel(x + xAwal, y + yAwal));  
         }  
       }  
       currentImage = newImage;  
       imagePanel.setImage(currentImage);  
       frame.pack();  
     }  
   }  
   private void makeFrame()  
   {  
     frame = new JFrame("ImageViewer");  
     JPanel contentPane = (JPanel)frame.getContentPane();  
     contentPane.setBorder(new EmptyBorder(6, 6, 6, 6));  
     makeMenuBar(frame);  
     // Specify the layout manager with nice spacing  
     contentPane.setLayout(new BorderLayout(6, 6));  
     // Create the image pane in the center  
     imagePanel = new ImagePanel();  
     imagePanel.setBorder(new EtchedBorder());  
     contentPane.add(imagePanel, BorderLayout.CENTER);  
     // Create two labels at top and bottom for the file name and status messages  
     filenameLabel = new JLabel();  
     contentPane.add(filenameLabel, BorderLayout.NORTH);  
     statusLabel = new JLabel(VERSION);  
     contentPane.add(statusLabel, BorderLayout.SOUTH);  
     // building is done - arrange the components     
     showFilename(null);  
     frame.pack();  
     // place the frame at the center of the screen and show  
     Dimension d = Toolkit.getDefaultToolkit().getScreenSize();  
     frame.setLocation(d.width/2 - frame.getWidth()/2, d.height/2 - frame.getHeight()/2);  
     frame.setVisible(true);  
   }  
   private void makeText()  
   {  
     JTextField xField = new JTextField(5);  
     JTextField yField = new JTextField(5);  
     JTextField zField = new JTextField(5);  
     JPanel myPanel = new JPanel();  
     myPanel.add(new JLabel("R"));  
     myPanel.add(xField);  
     myPanel.add(Box.createVerticalStrut(15)); // a spacer  
     myPanel.add(new JLabel("G"));  
     myPanel.add(yField);  
     myPanel.add(Box.createVerticalStrut(15)); // a spacer  
     myPanel.add(new JLabel("B"));  
     myPanel.add(zField);  
     if(currentImage != null) {  
       int width = currentImage.getWidth();  
       int height = currentImage.getHeight();  
       int xPosition = Integer.parseInt(JOptionPane.showInputDialog("Pixel Position X"));  
       int yPosition = Integer.parseInt(JOptionPane.showInputDialog("Pixel Position Y"));  
       float fontSize = Float.parseFloat(JOptionPane.showInputDialog("Font Size"));  
       String addText = JOptionPane.showInputDialog("Write Something..");  
       int result = JOptionPane.showConfirmDialog(null, myPanel, "Font Color", JOptionPane.OK_CANCEL_OPTION);  
       OFImage newImage = new OFImage(width, height);  
       // copy pixel data into new image  
       for(int y = 0; y < height; y++) {  
         for(int x = 0; x < width; x++) {  
           Color col = currentImage.getPixel(x, y);  
           newImage.setPixel(x, y, col);  
         }  
       }  
       int r = Integer.parseInt(xField.getText());  
       int gr = Integer.parseInt(yField.getText());  
       int b = Integer.parseInt(zField.getText());  
       Color c = new Color(r,gr,b);  
       Graphics g = newImage.getGraphics();  
       g.setFont(g.getFont().deriveFont(fontSize));  
       g.setColor(c);  
       g.drawString(addText, xPosition, yPosition);  
       g.dispose();  
       currentImage = newImage;  
       imagePanel.setImage(currentImage);  
     }  
   }  
   private void RotateR90() {  
     if(currentImage != null) {  
       // create new image with double size  
       int width = currentImage.getWidth();  
       int height = currentImage.getHeight();  
       OFImage newImage = new OFImage(height, width);  
       //copy pixel data into new image  
       for(int y = 0; y < height; y++) {  
         for(int x = 0; x < width; x++) {  
           Color col = currentImage.getPixel(x, y);  
           newImage.setPixel(height-y-1, x, col);  
         }  
       }  
       currentImage = newImage;  
       imagePanel.setImage(currentImage);  
       frame.pack();  
     }  
   }  
   private void RotateL90() {  
     if(currentImage != null) {  
       // create new image with double size  
       int width = currentImage.getWidth();  
       int height = currentImage.getHeight();  
       OFImage newImage = new OFImage(height, width);  
       //copy pixel data into new image  
       for(int y = 0; y < height; y++) {  
         for(int x = 0; x < width; x++) {  
           Color col = currentImage.getPixel(x, y);  
           newImage.setPixel(y, width-x-1, col);  
         }  
       }  
       currentImage = newImage;  
       imagePanel.setImage(currentImage);  
       frame.pack();  
     }  
   }  
   private void Rotate180() {  
     if(currentImage != null) {  
       // create new image with double size  
       int width = currentImage.getWidth();  
       int height = currentImage.getHeight();  
       OFImage newImage = new OFImage(width, height);  
       //copy pixel data into new image  
       for(int y = 0; y < height; y++) {  
         for(int x = 0; x < width; x++) {  
           Color col = currentImage.getPixel(width-x-1, height-y-1);  
           newImage.setPixel(x, y, col);  
         }  
       }  
       currentImage = newImage;  
       imagePanel.setImage(currentImage);  
       frame.pack();  
     }  
   }  
   private void makeMenuBar(JFrame frame)  
   {  
     final int SHORTCUT_MASK =  
       Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();  
     JMenuBar menubar = new JMenuBar();  
     frame.setJMenuBar(menubar);  
     JMenu menu;  
     JMenuItem item;  
     // create the File menu  
     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("Save As...");  
       item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, SHORTCUT_MASK));  
       item.addActionListener(new ActionListener() {  
                 public void actionPerformed(ActionEvent e) { saveAs(); }  
               });  
     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);  
     // create the Filter menu  
     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 ("Tools");  
     menubar.add(menu);  
     item = new JMenuItem ("Crop image");  
     item.addActionListener(new ActionListener() {  
       public void actionPerformed(ActionEvent e) {   
         crop ();}  
       });  
       menu.add(item);   
       item = new JMenuItem ("Add Text to image");  
       item.addActionListener(new ActionListener() {  
       public void actionPerformed(ActionEvent e) {   
         makeText ();}  
       });  
       menu.add(item);  
     menu = new JMenu("View");  
     menubar.add(menu);  
     item=new JMenuItem("Zoom Out (-)");  
       item.addActionListener(new ActionListener() {  
       public void actionPerformed(ActionEvent e) {   
         makeSmaller ();}  
       });  
       menu.add(item);  
     item=new JMenuItem("Zoom In (+)");  
       item.addActionListener(new ActionListener() {  
       public void actionPerformed(ActionEvent e) {   
         makeLarger ();}  
       });  
       menu.add(item);  
     item=new JMenuItem("Rotate 90 right");  
       item.addActionListener(new ActionListener() {  
       public void actionPerformed(ActionEvent e) {   
         RotateR90();}  
       });  
       menu.add(item);  
     item=new JMenuItem("Rotate 90 left");  
       item.addActionListener(new ActionListener() {  
       public void actionPerformed(ActionEvent e) {   
         RotateL90();}  
       });  
       menu.add(item);  
     item=new JMenuItem("Rotate 180");  
       item.addActionListener(new ActionListener() {  
       public void actionPerformed(ActionEvent e) {   
         Rotate180();}  
       });  
       menu.add(item);  
     // create the Help menu  
     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

import java.awt.image.*;  
 import javax.imageio.*;  
 import java.io.*;  
 /**  
  * Yasinta Yusniawati
  * 05111740000054
  * PBO - B   
  */  
 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)) {  
         // we could not load the image - probably invalid file format  
         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. ImagePanel


import java.awt.*;  
 import javax.swing.*;  
 import java.awt.image.*;  
 /**  
  * Yasinta Yusniawati
  * 05111740000054
  * PBO - B    
  */  
 public class ImagePanel extends JComponent  
 {  
   private int width, height;  
   private OFImage panelImage;  
   public ImagePanel()  
   {  
     width = 300;    
     height = 200;  
     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);  
     }  
   }  
 }  

4. OFImage


import java.awt.*;  
 import java.awt.image.*;  
 import javax.swing.*;  
 /**  
  * @author Yasinta Yusniawati  
  * @version EAS/20181210  
  */  
 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);  
   }  
 }  

5. PixelizeFilter


 import java.awt.Color;  
 /**  
  * Yasinta Yusniawati
  * 05111740000054
  * PBO - B    
  */  
 public class PixelizeFilter extends Filter  
 {  
   public PixelizeFilter(String name)  
   {  
     super(name);  
   }  
   public void apply(OFImage image)  
   {  
     final int PIXEL_SIZE = 5;  
     int width = image.getWidth();  
     int height = image.getHeight();  
     for(int y = 0; y < height; y += PIXEL_SIZE) {  
       for(int x = 0; x < width; x += PIXEL_SIZE) {  
         Color pix = image.getPixel(x, y);  
         for(int dy = y; dy < y + PIXEL_SIZE; dy++) {  
           for(int dx = x; dx < x + PIXEL_SIZE; dx++) {  
             if( dx < width && dy < height )  
               image.setPixel(dx, dy, pix);  
           }  
         }  
       }  
     }  
   }  
 }  

6. SmoothFilter


 import java.awt.Color;  
 import java.util.List;  
 import java.util.ArrayList;  
 /**  
  * @author Yasinta Yusniawati  
  * @version EAS/20181210  
  */  
 public class SmoothFilter extends Filter  
 {  
   private OFImage original;  
   private int width;  
   private int height;  
   public SmoothFilter(String name)  
   {  
     super(name);  
   }  
   public void apply(OFImage image)  
   {  
     original = new OFImage(image);  
     width = original.getWidth();  
     height = original.getHeight();  
     for(int y = 0; y < height; y++) {  
       for(int x = 0; x < width; x++) {  
         image.setPixel(x, y, smooth(x, y));  
       }  
     }  
   }  
   private Color smooth(int xpos, int ypos)  
   {  
     List<Color> pixels = new ArrayList<Color>(9);  
     for(int y = ypos - 1; y <= ypos + 1; y++) {  
       for(int x = xpos - 1; x <= xpos + 1; x++) {  
         if( x >= 0 && x < width && y >= 0 && y < height )  
           pixels.add(original.getPixel(x, y));  
       }  
     }  
     return new Color(avgRed(pixels), avgGreen(pixels), avgBlue(pixels));  
   }  
   private int avgRed(List<Color> pixels)  
   {  
     int total = 0;  
     for(Color color : pixels) {  
       total += color.getRed();  
     }  
     return total / pixels.size();  
   }  
   private int avgGreen(List<Color> pixels)  
   {  
     int total = 0;  
     for(Color color : pixels) {  
       total += color.getGreen();  
     }  
     return total / pixels.size();  
   }  
   private int avgBlue(List<Color> pixels)  
   {  
     int total = 0;  
     for(Color color : pixels) {  
       total += color.getBlue();  
     }  
     return total / pixels.size();  
   }  
 }  

7. ThresholdFilter


import java.awt.Color;  
 /**  
  * Yasinta Yusniawati
  * 05111740000054
  * PBO - B    
  */  
 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);  
         }  
       }  
     }  
   }  
 }  

8. InvertFilter


import java.awt.Color;  
 /**  
  * Yasinta Yusniawati
  * 05111740000054
  * PBO - B    
  */  
 public class InvertFilter extends Filter  
 {  
   public InvertFilter(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 pix = image.getPixel(x, y);  
         image.setPixel(x, y, new Color(255 - pix.getRed(),  
                         255 - pix.getGreen(),  
                         255 - pix.getBlue()));  
       }  
     }  
   }  
 }  

9. GrayScaleFilter


 import java.awt.Color;  
 /**  
  * Yasinta Yusniawati
  * 05111740000054
  * PBO - B    
  */  
 public class GrayScaleFilter extends Filter  
 {  
      public GrayScaleFilter(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 pix = image.getPixel(x, y);  
         int avg = (pix.getRed() + pix.getGreen() + pix.getBlue()) / 3;  
         image.setPixel(x, y, new Color(avg, avg, avg));  
       }  
     }  
   }  
 }  

10. SolarizeFilter


import java.awt.Color;  
 /**  
  * Yasinta Yusniawati
  * 05111740000054
  * PBO - B    
  */  
 public class SolarizeFilter extends Filter  
 {  
   public SolarizeFilter(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 pix = image.getPixel(x, y);  
         int red = pix.getRed();  
         if(red <= 127) {  
           red = 255 - red;  
         }  
         int green = pix.getGreen();  
         if(green <= 127) {  
           green = 255 - green;  
         }  
         int blue = pix.getBlue();  
         if(blue <= 127) {  
           blue = 255 - blue;  
         }  
         image.setPixel(x, y, new Color(red, green, blue));  
       }  
     }  
   }  
 }  

11. LighterFilter


/**  
  * Yasinta Yusniawati
  * 05111740000054
  * PBO - B    
  */  
 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());  
       }  
     }  
   }  
 }  

12. MirrorFilter


import java.awt.Color;  
 /**  
  * Yasinta Yusniawati
  * 05111740000054
  * PBO - B    
  */  
 public class MirrorFilter extends Filter  
 {  
      public MirrorFilter(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 / 2; x++) {  
         Color left = image.getPixel(x, y);  
         image.setPixel(x, y, image.getPixel(width - 1 - x, y));  
         image.setPixel(width - 1 - x, y, left);  
       }  
     }  
   }  
 }  

13. FishEyeFilter


import java.awt.Color;  
 /**  
  *Yasinta Yusniawati
  * 05111740000054
  * PBO - B    
  */  
 public class FishEyeFilter extends Filter  
 {  
   private final static int SCALE = 20;   
   private final static double TWO_PI = 2 * Math.PI;  
   public FishEyeFilter(String name)  
   {  
     super(name);  
   }  
   public void apply(OFImage image)  
   {  
     int height = image.getHeight();  
     int width = image.getWidth();  
     OFImage original = new OFImage(image);  
     int[] xa = computeXArray(width);  
     int[] ya = computeYArray(height);  
     for(int y = 0; y < height; y++) {  
       for(int x = 0; x < width; x++) {  
         image.setPixel(x, y, original.getPixel(x + xa[x], y + ya[y]));  
       }  
     }  
   }  
   private int[] computeXArray(int width)  
   {  
     int[] xArray = new int[width];  
     for(int i=0; i < width; i++) {  
       xArray[i] = (int)(Math.sin( ((double)i / width) * TWO_PI) * SCALE);  
     }  
     return xArray;  
   }  
   private int[] computeYArray(int height)  
   {  
     int[] yArray = new int[height];  
     for(int i=0; i < height; i++) {  
       yArray[i] = (int)(Math.sin( ((double)i / height) * TWO_PI) * SCALE);  
     }  
     return yArray;  
   }  
 }  

14. DarkerFilter


 /**   
  * Yasinta Yusniawati
  * 05111740000054
  * PBO - B  
  */  
 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());  
       }  
     }  
   }  
 }  

15. EdgeFilter


import java.awt.Color;  
 import java.util.List;  
 import java.util.ArrayList;  
 /**  
  * @author Yasinta Yusniawati  
  * @version EAS/20181210  
  */  
 public class EdgeFilter extends Filter  
 {  
   private static final int TOLERANCE = 20;  
   private OFImage original;  
   private int width;  
   private int height;  
   public EdgeFilter(String name)  
   {  
     super(name);  
   }  
   public void apply(OFImage image)  
   {  
     original = new OFImage(image);  
     width = original.getWidth();  
     height = original.getHeight();  
     for(int y = 0; y < height; y++) {  
       for(int x = 0; x < width; x++) {  
         image.setPixel(x, y, edge(x, y));  
       }  
     }  
   }  
   private Color edge(int xpos, int ypos)  
   {  
     List<Color> pixels = new ArrayList<Color>(9);  
     for(int y = ypos-1; y <= ypos+1; y++) {  
       for(int x = xpos-1; x <= xpos+1; x++) {  
         if( x >= 0 && x < width && y >= 0 && y < height ) {  
           pixels.add(original.getPixel(x, y));  
         }  
       }  
     }  
     return new Color(255 - diffRed(pixels), 255 - diffGreen(pixels), 255 - diffBlue(pixels));  
   }  
   private int diffRed(List<Color> pixels)  
   {  
     int max = 0;  
     int min = 255;  
     for(Color color : pixels) {  
       int val = color.getRed();  
       if(val > max) {  
         max = val;  
       }  
       if(val < min) {  
         min = val;  
       }  
     }  
     int difference = max - min - TOLERANCE;  
     if(difference < 0) {  
       difference = 0;  
     }  
     return difference;  
   }  
   private int diffGreen(List<Color> pixels)  
   {  
     int max = 0;  
     int min = 255;  
     for(Color color : pixels) {  
       int val = color.getGreen();  
       if(val > max) {  
         max = val;  
       }  
       if(val < min) {  
         min = val;  
       }  
     }  
     int difference = max - min - TOLERANCE;  
     if(difference < 0) {  
       difference = 0;  
     }  
     return difference;  
   }  
   private int diffBlue(List<Color> pixels)  
   {  
     int max = 0;  
     int min = 255;  
     for(Color color : pixels) {  
       int val = color.getBlue();  
       if(val > max) {  
         max = val;  
       }  
       if(val < min) {  
         min = val;  
       }  
     }  
     int difference = max - min - TOLERANCE;  
     if(difference < 0) {  
       difference = 0;  
     }  
     return difference;  
   }  
 }  

16. Filter


/**  
  * @author Yasinta Yusniawati  
  * @version EAS/20181210  
  */  
 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);  
 }  


4) SCREEN SHOT

Gambar Asli


Filter Mirror


Zoom In


Rotate 180 derajat


Add Text


Tugas APSI - C

USE CASE Analisa Use Case adalah teknik yang digunakan untuk mengidentifikasi kebutuhan sistem perangkat lunak dengan menggambarkan akt...