Anda di halaman 1dari 44

GRAFIKA DAN MULTIMEDIA KOMPUTER

Program Aplikasi Pengolahan Citra

AsApp

Nama : Anita Sarnita Suriani


Nim : 42514021
Kelas : D4 TKJ 2A

Jurusan Teknik Elektro


Program Studi D4 Teknik Komputer dan Jaringan
Politeknik Negeri Ujung Pandang
2016
BAB I

PENDAHULUAN

A. Latar Belakang
Dewasa ini, antusiasme masyarakat dunia terhadap foto/gambar
semakin meningkat. Orang-orang mengambil gambar lingkungan bahkan
dirinya sendiri hampir disetiap kesehariannya. Kebiasaan ini didukung dengan
makin canggih dan beragamnya kamera dan alat pengambil gambar lainnya.
Tidak hanya itu saja, sering kali manusia belum merasa cukup dengan
gambar yang diperolehnya. Untuk itu, berbagai aplikasi pengolah gambar/citra
baik yang berbasis web maupun android pun diciptakan dan dikembangkan
untuk memenuhi kebutuhan dan hasrat manusia terhadap nilai seni gambar.
Atas dasar ini, cukup penting untuk mengenal dan memahami
berbagai bentuk operasi hingga tool pengolahan gambar. Untuk mengenal
tool-toolnya dapat dilakukan dengan sering-sering menggunakan aplikasi
pengolahan gambar yang telah ada, sementara untuk lebih memahaminya
dapat dilakukan dengan mencoba membuat sendiri aplikasi tersebut,
meskipun masih dalam lingkup yang sederhana.

B. Tujuan
1. Mahasiswa mengetahui macam-macam operasi dasar pengolahan citra.
2. Mahasiswa mampu membuat aplikasi pengolahan citra.

BAB II
TINJAUAN PUSTAKA

A. Review Pengolahan Citra


Gambar digital adalah gambar yang dihasilkan dari proses oleh
gambar dikomputer, kamera, scanner atau perangkat elektronik lainnya.
Pemotretan menggunakan kamera digital atau media lain yang disimpan
dalam bentuk file.
Image editor ialah aplikasi untuk mengolah sebuah gambar baik
gambar raster/bitmap maupun vector. Gambar bitmap atau sering disebut
raster terdiri dari sekumpulan titik-titik (piksel) yang membentuk sebuah
gambar dan vektor terdiri dari sekumpulan garis dan kurva yang membentuk
suatu gambar.

B. Review Materi
Citra digital direpresentasikan dengan matriks sehingga operasi pada
citra digital pada dasarnya memanipulasi elemen-elemen matriks. Operasi
dasar pengolahan citra antara lain : operasi titik, operasi global, operasi
berbasis bingkai (frame), operasi geometri, dan operasi bertetangga.

OPERASI TITIK
Titik pada citra memiliki 2 karakteristik yaitu :
Koordinat yang menunjukkan lokasi dari titik tersebut dalam citra.
Nilai yg menunjukan tingkat keabuan/warna dari titik tersebut.
Operasi titik dilakukan dengan memodifikasi nilai skala keabuan dari
titik (piksel) yang ditinjau berdasarkan fungsi tertentu. Fungsi yang digunakan
adalah fungsi transformasi skala keabuan (gray scale transformation/GST).
GST function = fungsi yang memetakan tingkat keabuan input (Ki) ke citra
keabuan citra output (Ko)
Ko = f (Ki)
Untuk citra true color fungsi ini diterapkan pada ketiga elemen warna :
Ro = fR (Ri)
Go = fG (Gi)
Bo = fB (Bi)
Beberapa operasi pengolahan citra, terkait operasi titik :
1. Modifikasi kecemerlangan (brightness modification)
2. Peningkatan Kontras (contrast enhancement)
3. Negasi (negation)
4. Grayscale
5. Pengambangan (thresholding)

OPERASI GEOMETRI
Operasi Geometri pada pengolahan citra ditujukan untuk
memodifikasi koordinat piksel dalam suatu citra dengan pendekatan
tertentu, tetapi dalam perkembangannya dimungkinkan juga
memodifikasi nilai skala keabuan.
Operasi Geometri berhubungan dengan perubahan bentuk geometri
citra, antara lain :
1. Pencerminan (flipping)
2. Rotasi/pemutaran (Rotating)
3. Pemotongan (Cropping)
4. Penskalaan (Scaling/Zooming)

OPERASI BERBASIS BINGKAI (FRAME) = OPERASI MULTI IMAGE


Operasi multi image adalah operasi pengolahan terhadap lebih
dari satu obyek citra dan menghasilkan sebuah citra keluaran yang
merupakan hasil operasi matematis. Operasi ini dilakukan titik per titik dengan
lokasi yang bersesuaian pada citra-citra masukan.
Secara umum misal akan dioperasikan citra A dan citra B sehingga
menghasilkan citra C, maka dapat diformulasikan sbb :

C(x,y) = A(x,y) operator B(x,y)


Jika melibatkan lebih dari 2 citra, maka :
C(x,y) = A1(x,y) operator A2(x,y) operator A3(x,y)

Dalam operasi yang melibatkan dua buah citra atau lebih,


biasanya akan diterapkan operasi aritmatika, sebagai contoh :

Penjumlahan C(x,y) = A(x,y) + B(x,y)


Pengurangan C(x,y) = A(x,y) B(x,y)
Perkalian C(x,y) = A(x,y) * B(x,y)
Pembagian C(x,y) = A(x,y) / B(x,y)

Beberapa pengolahan citra yang berkaitan dengan operasi ini adalah :


1. Penggabungan citra (image blending)
2. Deteksi gerakan (motion detection)
3. Operasi Logika (logic Operation)
OPERASI BERTETANGGA / PERSEKITARAN (Neighborhood Operation)
Sebuah citra yang ideal, apabila mampu mencerminkan kondisi
sesungguhnya dari suatu obyek. Mempunyai hubungan satu-satu (one to
one), satu titik pada obyek dipetakan tepat satu pixel di citra digital. Tetapi
pada kenyataannya, hubungan yang ada antara titik dalam obyek dengan
titik pada citra digital adalah hubungan satu ke banyak (one to many) dan
banyak ke satu (many to one). Ini dikarenakan sinyal yang dikirim oleh
obyek citra mengalami penyebaran (divergensi), sehingga yang diterima
oleh sensor atau detector tidak lagi berupa suatu titik, namun berupa luasan.
Atau sebaliknya satu titik pada sensor atau detector dapat menerima
banyak sinyal dari bebrapa bagian.
Operasi persekitaran/bertetangga pada dasarnya adalah hubungan
antara citra dengan sebuah filter (mask / kernel). Nilai dari filter/mask
merupakan bobot kontribusi titik persekitaran terhadap operasi persekitaran.
Beberapa pengolahan citra yang berkaitan dengan operasi ini adalah :
1. Deteksi Tepi (Edge Detection)
2. Penghalusan Citra (Smoothing)
3. Penajaman Citra (Sharping)
4. Reduksi Noise
5. Efek Emboss

BAB III
PEMBAHASAN

A. Implementasi design
Tampilan Program AsApp
Analisa :
Program ini dibuat menggunakan bahasa pemrograman Java melalui aplikasi
NetBeans IDE 8.0. Memanfaatkan fitur GUI, program ini didesain sedemikian rupa
hingga menghasilkan tampilan seperti gambar di atas. Adapun tampilan ini masih
jauh dari kesempurnaan, dan masih membutuhkan lebih banyak perbaikan dan
perkembangan.

B. Pengujian Program
Penginputan Gambar
Analisa :
Untuk mengimput sebuah gambar, dapat dilakukan dengan menekan Open
File pada bar Picture ataupun dengan langsung menekan ctrl+O, hingga muncul
jendela browser untuk memilih gambar yang ada pada file komputer. Adapun gambar
yang dapat diinput adalah gambar yang berekstensi PNG atau JPG. Ini dibuat
menggunakan variabel jFileChooser.

Gambar Terinput

Analisa :
Gambar yang telah diinput akan langsung berada pada posisi label yang telah
diatur.
Left Rotate

Right Rotate

Analisa :
Rotasi citra termasuk dalam operasi geometri yang dilakukan dengan
memodifikasi koordinat pixel suatu gambar/citra. Operasi rotasi pada program ini
melakukan perputaran sebanyak 90 derajat searah jarum jam (CW) dan 90 derajat
berlawanan arah jarum jam (CCW).
Zoom In

Zoom Out

Analisa :
Untuk operasi zoom, dilakukan pengubahan ukuran gambar. Untuk tombol
zoom in, setiap kali ditekan maka akan menghasilkan ukuran gambar 5% lebih besar
dari ukuran gambar sebelumnya. Adapun tombol zoom out, setiap kali ditekan maka
menghasilkan ukuran gambar yang 5% lebih kecil dari ukuran gambar sebelumnya.
Translation

Analisa :
Operasi translation memungkinkan gambar untuk diseret ke segala penjuru
label menggunkan pointer. Pada NetBeans, operasi ini dapat dijalankan cukup
dengan melakukan sistem dragged and dropped.

Horizontal Flip
Vertical Flip

Analisa :
Flipping atau pencerminan citra juga merupakan salah satu operasi geometri.
Untuk percerminan horisontal gambar dicerminkan pada sumbu Y, sedangkan
pencerminan vertikal mencerminkan gambar pada sumbu X. Adapun nilai untuk
pencerminan horisontal adalah -1.0,1.0 dan untuk pencerminan vertikal nilainya
adalah 1.0,-1.0.

SunRed Effect

Analisa :
Untuk menciptakan efek yang menghasilkan gmabar seperti di atas, dilakukan
pengaturan tertentu untuk nilai contrast, brighteness, dan tingkat warna dasar (red,
green, blue). Nilai contrast yaitu 2*(-20)/150, nilai brighteness yaitu 2*155/150.
Kedua nilai ini dikalikan 2 dan dibagi 155 agar nilai hasil yang didapatkan adalah
nilai yang relevan. Selanjutnya untuk nilai dasar Red = 55, Green = 30, dan Blue =
15. Tidak ada rumus tertentu untuk penentuan nilai masing-masing. Nilai-nilai
tersebut hanya diuji hingga mendapatkan hasil gambar yang sesuai.

Clear Effect

Analisa :
Untuk efek pada gambar di atas, hanya dilakukan penentuan untuk nilai
contras dan brighteness saja. Nilai contrast yaitu 2*(10)/150, nilai brighteness yaitu
2*120/150. Efek ini ditujukan untuk membuat gambar terkesan lebih cerah dan
bersih. Efek ini lebih sesuai digunakan untuk gambar-gambar dengan banyak objek
seperti gambar pedesaan atau gambar pemandangan lainnya.

Contrast In
Contrast Out

Analisa :
Kontras merupakan salah satu macam operasi titik, yang mempengaruhi titik
yang gelap (bukan hitam) dan titik yang terang (bukan putih). Titik yang gelap akan
dibuat semakin gelap dan titik yang terang akn dibuat semakin terang. nilai kontras
190 diolah ke rumus faktornya, adapun nilai RGB dipertahankan. Untuk contrast in,
setiap kali ditekan kontras gambar akan meningkat 0.1f dari sebelumnya, dan untuk
contrast out, setiap kali ditekan kontras akan berkurang 0.1f. Gambar di atas
menunjukkan hasil gambar setelah tombol contrast in ditekan sekali dan juga untuk
tombol contrast out ditekan sekali.

Brightness In
Brightness Out

Analisa :
Kecemerlangan (brightness) merupakan bentuk operasi titik yang mengubah
titik gelap ke terang dan gerang ke gelap. Pada dasarnya, kecemerlangan bekerja
dengan menggeser histogram. Untuk brightness in, setiap kali ditekan
kecemerlangan gambar akan meningkat 0.5f dari sebelumnya, dan untuk brightness
out, setiap kali ditekan kecemerlangan akan berkurang 0.5f. Gambar di atas
menunjukkan hasil perubahan gambar saat brightness in dan brightness out masing-
masing ditekan sekali.

Sharp
Analisa :
Sharping atau penajaman citra termasuk dlam operasi bertetangga, yang
menjumlahkan nilai tepi dengan citra aslinya. Sehingga bagian tepi citra terlihat lebih
tajam.
Gray

Analisa :
Grayscale merupakan bentuk operasi titik yang mengkonversi warna citra
menjadi citra keabuan (secara keseluruhan) dengan dipengaruhi oleh faktor nilai
GRB citra tersebut .

Inverse

Analisa :
Inverse/ negasi merupakan bentuk operasi titik untuk mendapatkan nilai
negatif dari citra, dimana titik citra yang berwarna terang dibuat menjadi berwarna
hitam, dan titik gelap citra dibuat menjadi putih. Negasi mengurangi nilai intensitas
piksel dari nilai keabuan tertingginya. Pada histogramnya, terlihat bahwa operasi ini
membalikkan bentuk histogram dar citra tersebut.
Threshold

Analisa :
Thresholding/pengambangan yaitu operasi titik yang membuat citra ke dalam
nilai pasti yaitu 0 dan 1. Gambar yang dianggap terang dibuat menjadi berwarna
putih, sementara gambar yang dianggap/mendekali gelap dibuat menjadi berwarna
hitam. Intinya piksel-piksel dipisahkan berdasarkan derajat keabuan yang dimilikinya.
Piksel yang memiliki derajat keabuan lebih kecil dari nilai batas yang ditentukan akan
diberikan nilai 0, sementara piksel yang memiliki derajat keabuan yang lebih besar
dari batas akan diubah menjadi bernilai 1. Pada program ini, GRB citra yang nilainya
secara biner kurang dari 128 menjadi 255 (hitam) dan yang nilainya lebih dari 128
menjadi 0 (putih).
Edge
Analisa :
Deteksi tepi juga merupakan bentuk dari operasi bertetangga, dimana
ditentukan titik-titik yang merupakan tepi (titik dengan perbedaan warna yang cukup
besar dibandingkan titik disebelahnya) dari objek citra. Operasi ini mengubah bagian
yang diaanggap sebagai titik tepi menjadi warna putih, sementara yang lainnya
berwarna hitam.

Blend Image

Analisa :
Image Blending atau penggabungan citra termasuk dalam operasi berbasis
bingkai/frame dengan sistem multi image. Pada operasi penggabungan citra,
gambar yang telah diinput digabungkan dengan gambar baru dengan cara
ditimpakan. Hanya saja gambar kedua dibuat lebih transparan sehingga tidak
menutupi bagian dari gambar yang pertama. Nilai transparansinya dalah 0.5F.
BAB IV
PENUTUP

A. Kesimpulan
Pada dasarnya pengolahan citra merupakan presentasi dari
pemanipulasian elemen-elemen matriks dari citra tersebut.
Pemanipulasian/pengolahan cintra ini dapat dilakukan dengan beberapa
operasi-operasi pengolahan citra.
Pengolahan citra biasanya dilakukan untuk memperbaiki ataupun
memperindah suatu gambar sehingga memiliki nilai seni yang lebih tinggi dan
terlihat lebih menarik. Kini, sudah tersedia sangat banyak aplikasi pengolahan
citra yang dapat digunakan dengan mudah untuk mendapatkan citra gambar
yang sesuai keinginan. Adapun belajar membuat aplikasi pengolahan citra
sederhana seperti ini dapat membantu kita untuk lebih memahami algoritma-
algoritma yang digunakan untuk membuat setiap tool pengolah citra, sehingga
kita bisa lebih paham akan kegunaan dan manfaat tiap-tiap tool tersebut.

B. Saran
Dalam membuat program, haruslah dengan tetap memperhatikan
efektifitas dan efisiensinya, agar program tersebut dapat berfungsi dengan
baik dan memberikan manfaat yang besar.
Program aplikasi AsApp ini masih jauh dari kesemprnaan, untuk itu
berbagai kritik dan saran yang membangun sangat diharapkan untuk
peningkatan dan kesempurnaan aplikasi ini.
C. Source Code Program Aplikasi AsApp

package geometri;

import java.awt.AlphaComposite;
import java.awt.Color;
import javax.swing.UIManager;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.geom.AffineTransform;
import java.awt.image.AffineTransformOp;
import java.awt.image.BufferedImage;
import java.awt.image.ConvolveOp;
import java.awt.image.Kernel;
import java.awt.image.RescaleOp;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileNameExtensionFilter;

public class GeometriApp extends javax.swing.JFrame {

//OPERASI GEOMETRI

public BufferedImage GFlipHor(BufferedImage src){


//scale,translate, transform,filter
AffineTransform tx=AffineTransform.getScaleInstance(-1.0,1.0);
tx.translate(-src.getWidth(),0);
AffineTransformOp tr=new AffineTransformOp(tx,null);
return tr.filter(src, null);
}

public BufferedImage GFlipVer(BufferedImage src){


//scale,translate, transform,filter
AffineTransform tx=AffineTransform.getScaleInstance(1.0,-1.0);
tx.translate(0,-src.getHeight());
AffineTransformOp tr=new AffineTransformOp(tx,null);
return tr.filter(src, null);
}

void GRotate(){
double theta = Math.toRadians(rotasiint);
double cos = Math.abs(Math.cos(theta));
double sin = Math.abs(Math.sin(theta));
int width = image.getWidth();
int height = image.getHeight();
int w = (int)(width * cos + height * sin);
int h = (int)(width * sin + height * cos);
BufferedImage out = new BufferedImage(w, h, image.getType());
Graphics2D g2 = out.createGraphics();
g2.setPaint(UIManager.getColor("Panel.background"));
g2.fillRect(0,0,w,h);
double x = w/2;
double y = h/2;
AffineTransform at = AffineTransform.getRotateInstance(theta, x, y);
x = (w - width)/2;
y = (h - height)/2;
at.translate(x, y);
g2.drawRenderedImage(image, at);
g2.dispose();
take.setIcon(new ImageIcon(out));
}

public void Scale(){


URL file1 = this.getClass().getResource("/geometri/add.jpg");
String file = Chooser.getCurrentDirectory()+"/"+"add.jpg";
try {
GeometriApp.make(url, file, Width, Height);
image = ImageIO.read(new File(file));
}
catch (IOException ex) {
Logger.getLogger(GeometriApp.class.getName()).log(Level.SEVERE,
null, ex);
}
repaint();
}

//OPERASI TITIK

public void TGray(int Pixel) {


int A = (Pixel >> 24) & 0xff;
int R = (Pixel >> 16) & 0xff;
int G = (Pixel >> 8) & 0xff;
int B = (Pixel) & 0xff;
int newpixel = R+G+B;
newpixel = newpixel / 3;
Gray = new Color(newpixel, newpixel, newpixel);
}

public void TThreshold(int pixel) {


int A = (pixel >> 24) & 0xff;
int R = (pixel >> 16) & 0xff;
int G = (pixel >> 8) & 0xff;
int B = (pixel) & 0xff;
int newpixel = R+G+B;
newpixel = newpixel / 3;
Treshold = new Color(newpixel, newpixel, newpixel);
}

public void TInverse(int pixel) {


int A = (pixel >> 24) & 0xff;
int R = (pixel >> 16) & 0xff;
int G = (pixel >> 8) & 0xff;
int B = (pixel) & 0xff;
Inverse = new Color(255-R, 255-G, 255-B);
}

public void TContrast(int pixel) {


int A = (pixel >> 24) & 0xff;
int R = (pixel >> 16) & 0xff;
int G = (pixel >> 8) & 0xff;
int B = (pixel) & 0xff;
int contrast = 190;
float factor = (259 * (contrast + 255)) / (255 * (259 - contrast));
int newRed = Math.round(factor * (R - 128) + 128);
if (newRed > 255){
newRed = 255;
}
if (newRed < 0){
newRed = 0;
}
int newGreen = Math.round(factor * (G - 128) + 128);
if (newGreen > 255){
newGreen = 255;
}
if (newGreen < 0){
newGreen = 0;
}
int newBlue = Math.round(factor * (B - 128) + 128);
if (newBlue > 255){
newBlue = 255;
}
if (newBlue < 0){
newBlue = 0;
}
Contrast = new Color(newRed, newGreen, newBlue);
}

// INISIALISASI
BufferedImage image, Src, Dest, Ot, SharpImage, EdgeImage,
BlendImage, NewImage;
JFileChooser Chooser = new JFileChooser();
JFileChooser BlendChooser = new JFileChooser();
Color Brightness,Treshold,Inverse,Contrast,Gray;
Point Click;
Graphics2D Add;
RescaleOp Rescale;
String url, blend;
float Scale = 1.0f, Brighten, Offset = 10;
int Width, Height, per, rotasiint;
boolean bright, contrast;

public GeometriApp() {
initComponents();
}

public void BufferedImageAdd(){


Src = new
BufferedImage(image.getWidth(this),image.getHeight(this),BufferedImage.TY
PE_INT_RGB);
Add = Src.createGraphics();
Add.drawImage(image, 0, 0, this);
Dest = new
BufferedImage(image.getWidth(this),image.getHeight(this),BufferedImage.TY
PE_INT_RGB);
Ot = Src;
}

public void ChangeOffSet() {


if (bright) {
if (Offset < 255)
Offset = Offset+5.0f;
}
else {
if (Offset > 0)
Offset = Offset-5.0f;
}
}

public void CScale() {

if (contrast) {
if (Scale < 255)
Scale = Scale+0.1f;
}
else {
if (Scale > 0)
Scale = Scale-0.1f;
}
}

public void Rescale() {


Rescale = new RescaleOp(Scale, Offset, null);
Rescale.filter(Src, Dest);
Ot = Dest;
}

public static void make(String inputImagePath,


String outputImagePath, int scaledWidth, int scaledHeight)
throws IOException {
File inputFile = new File(inputImagePath);
BufferedImage inputImage = ImageIO.read(inputFile);
BufferedImage outputImage = new BufferedImage(scaledWidth,
scaledHeight, inputImage.getType());
Graphics2D g2d = outputImage.createGraphics();
g2d.drawImage(inputImage, 0, 0, scaledWidth, scaledHeight, null);
g2d.dispose();
String formatName =
outputImagePath.substring(outputImagePath.lastIndexOf(".") + 1);
ImageIO.write(outputImage, formatName, new File(outputImagePath));
}

public static void make(String inputImagePath,


String outputImagePath, double percent) throws IOException {
File inputFile = new File(inputImagePath);
BufferedImage inputImage = ImageIO.read(inputFile);
int scaledWidth = (int) (inputImage.getWidth() * percent);
int scaledHeight = (int) (inputImage.getHeight() * percent);
make(inputImagePath, outputImagePath, scaledWidth, scaledHeight);
}

@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {

LeftRotate = new javax.swing.JButton();


RightRotate = new javax.swing.JButton();
HorizontalFlip = new javax.swing.JButton();
VerticalFlip = new javax.swing.JButton();
ZoomIn = new javax.swing.JButton();
ZoomOut = new javax.swing.JButton();
jScrollPane1 = new javax.swing.JScrollPane();
take = new javax.swing.JLabel();
Grayb = new javax.swing.JButton();
ContrasPlus = new javax.swing.JButton();
Invers = new javax.swing.JButton();
jLabel1 = new javax.swing.JLabel();
SunEffect = new javax.swing.JButton();
Edge = new javax.swing.JButton();
ClearEffect = new javax.swing.JButton();
Threshold = new javax.swing.JButton();
ContrastMunus = new javax.swing.JButton();
jLabel3 = new javax.swing.JLabel();
BrightnessPlus = new javax.swing.JButton();
BirghtnessMinus = new javax.swing.JButton();
Sharp = new javax.swing.JButton();
Blend = new javax.swing.JButton();
jLabel2 = new javax.swing.JLabel();
jLabel4 = new javax.swing.JLabel();
jMenuBar1 = new javax.swing.JMenuBar();
jMenu1 = new javax.swing.JMenu();
jMenuItem1 = new javax.swing.JMenuItem();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

LeftRotate.setIcon(new javax.swing.ImageIcon("F:\\ANITA
SURIANI\\POLITEKNIK\\TEKNIK KOMPUTER dan
JARINGAN\\PICTURES\\GRAFIKA KOMPUTER DAN
MULTIMEDIA\\rotatel.JPG")); // NOI18N
LeftRotate.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
LeftRotateActionPerformed(evt);
}
});

RightRotate.setIcon(new javax.swing.ImageIcon("F:\\ANITA
SURIANI\\POLITEKNIK\\TEKNIK KOMPUTER dan
JARINGAN\\PICTURES\\GRAFIKA KOMPUTER DAN
MULTIMEDIA\\rotater.JPG")); // NOI18N
RightRotate.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
RightRotateActionPerformed(evt);
}
});

HorizontalFlip.setIcon(new
javax.swing.ImageIcon(getClass().getResource("/geometri/horizontal.PNG")));
// NOI18N
HorizontalFlip.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
HorizontalFlipActionPerformed(evt);
}
});
VerticalFlip.setIcon(new
javax.swing.ImageIcon(getClass().getResource("/geometri/vertikall.PNG"))); //
NOI18N
VerticalFlip.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
VerticalFlipActionPerformed(evt);
}
});

ZoomIn.setIcon(new
javax.swing.ImageIcon(getClass().getResource("/geometri/zoon in.PNG"))); //
NOI18N
ZoomIn.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
ZoomInActionPerformed(evt);
}
});

ZoomOut.setIcon(new
javax.swing.ImageIcon(getClass().getResource("/geometri/xoom
out.PNG"))); // NOI18N
ZoomOut.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
ZoomOutActionPerformed(evt);
}
});

take.addMouseMotionListener(new
java.awt.event.MouseMotionAdapter() {
public void mouseDragged(java.awt.event.MouseEvent evt) {
takeMouseDragged(evt);
}
});
take.addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent evt) {
takeMousePressed(evt);
}
});
jScrollPane1.setViewportView(take);

Grayb.setForeground(new java.awt.Color(0, 204, 255));


Grayb.setText("Gray");
Grayb.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
GraybActionPerformed(evt);
}
});
ContrasPlus.setIcon(new javax.swing.ImageIcon("F:\\ANITA
SURIANI\\POLITEKNIK\\TEKNIK KOMPUTER dan
JARINGAN\\PICTURES\\GRAFIKA KOMPUTER DAN
MULTIMEDIA\\plus.JPG")); // NOI18N
ContrasPlus.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
ContrasPlusActionPerformed(evt);
}
});

Invers.setForeground(new java.awt.Color(255, 0, 204));


Invers.setText("Invers");
Invers.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
InversActionPerformed(evt);
}
});

jLabel1.setForeground(new java.awt.Color(51, 153, 255));


jLabel1.setText("Brightness");

SunEffect.setIcon(new javax.swing.ImageIcon("F:\\ANITA
SURIANI\\POLITEKNIK\\TEKNIK KOMPUTER dan
JARINGAN\\PICTURES\\GRAFIKA KOMPUTER DAN MULTIMEDIA\\sun
effect.PNG")); // NOI18N
SunEffect.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
SunEffectActionPerformed(evt);
}
});

Edge.setForeground(new java.awt.Color(255, 0, 153));


Edge.setText("Edge");
Edge.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
EdgeActionPerformed(evt);
}
});

ClearEffect.setIcon(new javax.swing.ImageIcon("F:\\ANITA
SURIANI\\POLITEKNIK\\TEKNIK KOMPUTER dan
JARINGAN\\PICTURES\\GRAFIKA KOMPUTER DAN MULTIMEDIA\\clear
effect.PNG")); // NOI18N
ClearEffect.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
ClearEffectActionPerformed(evt);
}
});

Threshold.setForeground(new java.awt.Color(0, 204, 255));


Threshold.setText("Threshold");
Threshold.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
ThresholdActionPerformed(evt);
}
});

ContrastMunus.setIcon(new javax.swing.ImageIcon("F:\\ANITA
SURIANI\\POLITEKNIK\\TEKNIK KOMPUTER dan
JARINGAN\\PICTURES\\GRAFIKA KOMPUTER DAN
MULTIMEDIA\\minus.JPG")); // NOI18N
ContrastMunus.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
ContrastMunusActionPerformed(evt);
}
});

jLabel3.setForeground(new java.awt.Color(0, 153, 255));


jLabel3.setText("Contrast");

BrightnessPlus.setIcon(new javax.swing.ImageIcon("F:\\ANITA
SURIANI\\POLITEKNIK\\TEKNIK KOMPUTER dan
JARINGAN\\PICTURES\\GRAFIKA KOMPUTER DAN
MULTIMEDIA\\plus.JPG")); // NOI18N
BrightnessPlus.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
BrightnessPlusActionPerformed(evt);
}
});

BirghtnessMinus.setIcon(new javax.swing.ImageIcon("F:\\ANITA
SURIANI\\POLITEKNIK\\TEKNIK KOMPUTER dan
JARINGAN\\PICTURES\\GRAFIKA KOMPUTER DAN
MULTIMEDIA\\minus.JPG")); // NOI18N
BirghtnessMinus.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
BirghtnessMinusActionPerformed(evt);
}
});

Sharp.setForeground(new java.awt.Color(255, 0, 204));


Sharp.setText("Sharp");
Sharp.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
SharpActionPerformed(evt);
}
});

Blend.setForeground(new java.awt.Color(0, 102, 0));


Blend.setText("Blend Image");
Blend.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
BlendActionPerformed(evt);
}
});

jLabel2.setForeground(new java.awt.Color(255, 51, 51));


jLabel2.setText("Effect");

jLabel4.setFont(new java.awt.Font("Tahoma", 1, 12)); // NOI18N


jLabel4.setForeground(new java.awt.Color(204, 0, 51));
jLabel4.setText("Filter");

jMenu1.setForeground(new java.awt.Color(255, 0, 204));


jMenu1.setText("Picture");
jMenu1.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseExited(java.awt.event.MouseEvent evt) {
jMenu1MouseExited(evt);
}
});

jMenuItem1.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.eve
nt.KeyEvent.VK_O, java.awt.event.InputEvent.CTRL_MASK));
jMenuItem1.setForeground(new java.awt.Color(0, 153, 255));
jMenuItem1.setText(" Open File");
jMenuItem1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jMenuItem1ActionPerformed(evt);
}
});
jMenu1.add(jMenuItem1);

jMenuBar1.add(jMenu1);

setJMenuBar(jMenuBar1);

javax.swing.GroupLayout layout = new


javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(

layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LE
ADING)
.addGroup(layout.createSequentialGroup()
.addComponent(LeftRotate,
javax.swing.GroupLayout.PREFERRED_SIZE, 40,
javax.swing.GroupLayout.PREFERRED_SIZE)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(RightRotate,
javax.swing.GroupLayout.PREFERRED_SIZE, 40,
javax.swing.GroupLayout.PREFERRED_SIZE)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(HorizontalFlip,
javax.swing.GroupLayout.PREFERRED_SIZE, 43,
javax.swing.GroupLayout.PREFERRED_SIZE)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(VerticalFlip,
javax.swing.GroupLayout.PREFERRED_SIZE, 45,
javax.swing.GroupLayout.PREFERRED_SIZE)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(ZoomIn,
javax.swing.GroupLayout.PREFERRED_SIZE, 41,
javax.swing.GroupLayout.PREFERRED_SIZE)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(ZoomOut,
javax.swing.GroupLayout.PREFERRED_SIZE, 40,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(68, 68, 68)
.addComponent(jLabel2)
.addGap(18, 18, 18)
.addComponent(SunEffect,
javax.swing.GroupLayout.PREFERRED_SIZE, 38,
javax.swing.GroupLayout.PREFERRED_SIZE)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(ClearEffect,
javax.swing.GroupLayout.PREFERRED_SIZE, 37,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(57, 57, 57)
.addComponent(jLabel3)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELAT
ED)
.addComponent(ContrasPlus,
javax.swing.GroupLayout.PREFERRED_SIZE, 32,
javax.swing.GroupLayout.PREFERRED_SIZE)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(ContrastMunus,
javax.swing.GroupLayout.PREFERRED_SIZE, 33,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(35, 35, 35)
.addComponent(jLabel1,
javax.swing.GroupLayout.PREFERRED_SIZE, 63,
javax.swing.GroupLayout.PREFERRED_SIZE)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(BrightnessPlus,
javax.swing.GroupLayout.PREFERRED_SIZE, 32,
javax.swing.GroupLayout.PREFERRED_SIZE)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(BirghtnessMinus,
javax.swing.GroupLayout.PREFERRED_SIZE, 33,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addComponent(jScrollPane1,
javax.swing.GroupLayout.PREFERRED_SIZE, 1003,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LE
ADING)
.addGroup(layout.createSequentialGroup()

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LE
ADING, false)
.addComponent(Blend,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(Sharp,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(Grayb,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(Invers,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(Threshold,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(Edge,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
.addGroup(layout.createSequentialGroup()
.addGap(34, 34, 34)
.addComponent(jLabel4)))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE))
);
layout.setVerticalGroup(

layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LE
ADING)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LE
ADING)

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.T
RAILING, false)
.addComponent(ZoomOut,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(ZoomIn,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(VerticalFlip,
javax.swing.GroupLayout.Alignment.LEADING,
javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
.addComponent(HorizontalFlip,
javax.swing.GroupLayout.Alignment.LEADING,
javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
.addComponent(RightRotate,
javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
.addComponent(LeftRotate,
javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE))
.addGroup(layout.createSequentialGroup()
.addContainerGap()

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LE
ADING)
.addComponent(ContrasPlus,
javax.swing.GroupLayout.PREFERRED_SIZE, 30,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(ContrastMunus,
javax.swing.GroupLayout.Alignment.TRAILING,
javax.swing.GroupLayout.PREFERRED_SIZE, 31,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(BirghtnessMinus,
javax.swing.GroupLayout.Alignment.TRAILING,
javax.swing.GroupLayout.PREFERRED_SIZE, 28,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel3)

.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel1)
.addComponent(BrightnessPlus,
javax.swing.GroupLayout.PREFERRED_SIZE, 29,
javax.swing.GroupLayout.PREFERRED_SIZE))))
.addComponent(ClearEffect,
javax.swing.GroupLayout.Alignment.TRAILING,
javax.swing.GroupLayout.PREFERRED_SIZE, 38,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(SunEffect,
javax.swing.GroupLayout.Alignment.TRAILING,
javax.swing.GroupLayout.PREFERRED_SIZE, 38,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel2)))

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELAT
ED)

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LE
ADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel4,
javax.swing.GroupLayout.PREFERRED_SIZE, 23,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(Sharp,
javax.swing.GroupLayout.PREFERRED_SIZE, 23,
javax.swing.GroupLayout.PREFERRED_SIZE)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELAT
ED)
.addComponent(Grayb)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELAT
ED)
.addComponent(Invers)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELAT
ED)
.addComponent(Threshold)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELAT
ED)
.addComponent(Edge)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELAT
ED)
.addComponent(Blend))
.addComponent(jScrollPane1,
javax.swing.GroupLayout.PREFERRED_SIZE, 452,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(24, Short.MAX_VALUE))
);

pack();
}// </editor-fold>

private void SliderMouseReleased(java.awt.event.MouseEvent evt) {

}
private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {
// Insert Image
FileNameExtensionFilter filter = new
FileNameExtensionFilter("JPG,PNG,GIF", "jpg", "gif", "png");
Chooser.setFileFilter(filter);
int returnVal = Chooser.showOpenDialog(GeometriApp.this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
System.out.println("Open Picture : "+
Chooser.getSelectedFile().getName());
System.out.print("Directory : "+Chooser.getCurrentDirectory());
url=Chooser.getCurrentDirectory()
+"/"+Chooser.getSelectedFile().getName();
try {
image = ImageIO.read(new File(url));
take.setIcon(new ImageIcon(image));
}
catch (IOException ex){
System.out.println("No Picture");
}
}
}

private void LeftRotateActionPerformed(java.awt.event.ActionEvent evt) {


// OPERASI GEOMETRI
// Left Rotate
if (rotasiint - 90 < 0){
rotasiint = 90 - rotasiint;
rotasiint = 360 - rotasiint;
}
else{
rotasiint = rotasiint - 90;
}
GRotate();
}

private void RightRotateActionPerformed(java.awt.event.ActionEvent evt) {


// OPERASI GEOMETRI
// Right Rotate
if (rotasiint + 90 > 360){
rotasiint = 360 - rotasiint;
rotasiint = 90 - rotasiint;
}
else{
rotasiint = rotasiint + 90;
}
GRotate();
}

private void HorizontalFlipActionPerformed(java.awt.event.ActionEvent evt)


{
// OPERASI GEOMETRI
// Flip Horizontal
image = GFlipHor(image);
take.setIcon(new ImageIcon(image));
}

private void VerticalFlipActionPerformed(java.awt.event.ActionEvent evt) {


// OPERASI GEOMETRI
// Flip Vertical
image = GFlipVer(image);
take.setIcon(new ImageIcon(image));
}

private void ZoomInActionPerformed(java.awt.event.ActionEvent evt) {


// OPERASI GEOMETRI
// Zoom In
try {
ImageIO.write(image, "jpg", new File(Chooser.getCurrentDirectory()
+"/"+"tambah.jpg"));
String file = Chooser.getCurrentDirectory()+"/"+"tambah.jpg";
int Widhten = image.getWidth()/20;
int Heighten = image.getHeight()/20;
Width = image.getWidth() + Widhten;
Height = image.getHeight() + Heighten;
GeometriApp.make(url, file, Width, Height);
image = ImageIO.read(new File(file));
take.setSize (Width, Height);
take.setIcon(new ImageIcon(image));

} catch (IOException ex) {


Logger.getLogger(GeometriApp.class.getName()).log(Level.SEVERE,
null, ex);
}
repaint();
}

private void ZoomOutActionPerformed(java.awt.event.ActionEvent evt) {


// OPERASI GEOMETRI
// Zoom Out
String file = Chooser.getCurrentDirectory()+"/"+"tambah.jpg";
try {
int WOut = image.getWidth()/20;
int HOut = image.getHeight()/20;
Width = image.getWidth() - WOut;
Height = image.getHeight() - HOut;
GeometriApp.make(url, file, Width, Height);
image = ImageIO.read(new File(file));
take.setSize(Width,Height);
take.setIcon(new ImageIcon(image));

} catch (IOException ex) {


Logger.getLogger(GeometriApp.class.getName()).log(Level.SEVERE,
null, ex);
}
repaint();
}

private void takeMousePressed(java.awt.event.MouseEvent evt) {


// OPERASI GEOMETRI
// Translation
Click = evt.getPoint();
}

private void takeMouseDragged(java.awt.event.MouseEvent evt) {


// OPERASI GEOMETRI
//Translation
int takex = take.getLocation().x;
int takey = take.getLocation().y;

int xMoved = (takex + evt.getX()) - (takex + Click.x);


int yMoved = (takey + evt.getY()) - (takey + Click.y);

int X = takex + xMoved;


int Y = takey + yMoved;

take.setLocation(X, Y);
take.repaint();
}

private void GraybActionPerformed(java.awt.event.ActionEvent evt) {


// OPERASI TITIK
// Gray
if(Ot != null)
{
NewImage = Ot;
int w = Ot.getWidth();
int h = Ot.getHeight();
for (int i = 0; i < h; i++){
for (int a = 0; a < w; a++) {
int pixel = Ot.getRGB(a, i);
TGray(pixel);
NewImage.setRGB(a, i, Gray.getRGB());
}
}
take.setIcon(new ImageIcon(Ot));
}else{
NewImage = image;
int w = image.getWidth();
int h = image.getHeight();
for (int i = 0; i < h; i++) {
for (int a = 0; a < w; a++) {
int pixel = image.getRGB(a, i);
TGray(pixel);
NewImage.setRGB(a, i, Gray.getRGB());
}
}
take.setIcon(new ImageIcon(image));
}
}

private void ContrasPlusActionPerformed(java.awt.event.ActionEvent evt) {


// OPERASI TITIK
//Contrast Plus
contrast = true;
BufferedImageAdd();
CScale();
Rescale();
take.setIcon(new ImageIcon(Ot));
}

private void jMenu1MouseExited(java.awt.event.MouseEvent evt) {


// TODO add your handling code here:
}

private void InversActionPerformed(java.awt.event.ActionEvent evt) {


// OPERASI TITIK
// Inverse
int w = image.getWidth();
int h = image.getHeight();
for (int i = 0; i < h; i++) {
for (int a = 0; a < w; a++) {
int pixel = image.getRGB(a, i);
TInverse(pixel);
image.setRGB(a, i, Inverse.getRGB());
}
}
take.setIcon(new ImageIcon(image));
}

private void SunEffectActionPerformed(java.awt.event.ActionEvent evt) {


// THEME
// Sun Effect
BufferedImage image1 = image;
float offset = -20;
offset = 2 * offset / 150;
float scaleFactor = 115;
scaleFactor = 2 * scaleFactor / 150;
RescaleOp op = new RescaleOp(scaleFactor, offset, null);
image = op.filter(image, image1);

int j = image.getWidth();
int k = image.getHeight();
int limit = 90;
for (int i = 0, a; i < j; ++i){
for(a = 0; a < k; ++a){
int pixel = image.getRGB(i, a);
int A = (pixel >> 24) & 0xff;
int R = (pixel >> 16) & 0xff;
int G = (pixel >> 8) & 0xff;
int B = (pixel) & 0xff;

int newRed = R + 55;


if (newRed > 255){
newRed = 255;}
if (newRed < 0){
newRed = 0;}

int newGreen = G + 30;


if (newGreen > 255){
newGreen = 255;}
if (newGreen < 0){
newGreen = 0;}

int newBlue = B + 15;


if (newBlue > 255){
newBlue = 255;}
if (newBlue < 0){
newBlue = 0;}
Contrast = new Color(A, newRed, newGreen, newBlue);
image1.setRGB(i, a, Contrast.getRGB());
}
}
take.setIcon(new ImageIcon(image1));
repaint();
}

private void EdgeActionPerformed(java.awt.event.ActionEvent evt) {


// OPERASI TETANGGA
// Edge
try{
ImageIO.write(image, "PNG",new
File("E:/"+Chooser.getSelectedFile().getName()));
String filein = "E:/"+Chooser.getSelectedFile().getName();
EdgeImage = ImageIO.read(new File(filein));
new File("E:/"+Chooser.getSelectedFile().getName()).delete();
float data[] = {0, -1, 0,-1, 4, -1,0, -1, 0};
Kernel kernel = new Kernel(3,3,data);
ConvolveOp convolve = new ConvolveOp(kernel,
ConvolveOp.EDGE_NO_OP,null);
image = convolve.filter(image, EdgeImage);
take.setIcon(new ImageIcon(image)); }
catch (IOException ex) {
Logger.getLogger(GeometriApp.class.getName()).log(Level.SEVERE,
null, ex);
}
}

private void ClearEffectActionPerformed(java.awt.event.ActionEvent evt) {


// THEME
// Clear Effect
BufferedImage image1 = image;
float offset = 10;
offset = 2 * offset / 150;
float scaleFactor = 120;
scaleFactor = 2 * scaleFactor / 150;
RescaleOp op = new RescaleOp(scaleFactor, offset, null);
image = op.filter(image, image1);

take.setIcon(new ImageIcon(image1));
repaint();
}

private void ThresholdActionPerformed(java.awt.event.ActionEvent evt) {


// OPERASI TITIK
//Thresholding
int w = image.getWidth();
int h = image.getHeight();
for(int i = 0, a; i < w; ++i) {
for(a = 0; a < h; ++a) {
int pixel = image.getRGB(i, a);
int alpha = (pixel >> 24) & 0xff;
int red = (pixel >> 16) & 0xff;
int green = (pixel >> 8) & 0xff;
int blue = (pixel) & 0xff;
if(128 <= red || 128 <= green || 128 <= blue) {
Color color2 = new Color(255, 255, 255, alpha);
image.setRGB(i, a, color2.getRGB()); }
else {
Color color2 = new Color(0, 0, 0, alpha);
image.setRGB(i, a, color2.getRGB());
}
}
}
take.setIcon(new ImageIcon(image));
}

private void BrightnessPlusActionPerformed(java.awt.event.ActionEvent


evt) {
// OPERASI TITIK
//Brightness Plus
bright = true;
BufferedImageAdd();
ChangeOffSet();
Rescale();
take.setIcon(new ImageIcon(Ot));
}

private void ContrastMunusActionPerformed(java.awt.event.ActionEvent


evt) {
// OPERASI TITIK
//Contrast Minus
contrast = false;
BufferedImageAdd();
CScale();
Rescale();
take.setIcon(new ImageIcon(Ot));
}

private void BirghtnessMinusActionPerformed(java.awt.event.ActionEvent


evt) {
// OPERASI TITIK
//Brightness Minus
bright = false;
BufferedImageAdd();
ChangeOffSet();
Rescale();
take.setIcon(new ImageIcon(Ot));
}

private void SharpActionPerformed(java.awt.event.ActionEvent evt) {


// OPERASI TETANGGA
// Sharping
try{
ImageIO.write(image, "PNG",new
File("E:/"+Chooser.getSelectedFile().getName()));
String filein = "E:/"+Chooser.getSelectedFile().getName();
SharpImage = ImageIO.read(new File(filein));
new File("E:/"+Chooser.getSelectedFile().getName()).delete();
float[] data = {0, -1, 0,-1, 5, -1,0, -1, 0};
Kernel kernel = new Kernel(3,3,data);
ConvolveOp convolve = new ConvolveOp(kernel,
ConvolveOp.EDGE_NO_OP,null);
image = convolve.filter(image, SharpImage); }
catch (IOException ex) {
Logger.getLogger(GeometriApp.class.getName()).log(Level.SEVERE,
null, ex);
}
take.setIcon(new ImageIcon(image));
}

private void BlendActionPerformed(java.awt.event.ActionEvent evt) {


// OPERASI FRAME
// Blend Image
FileNameExtensionFilter filter = new FileNameExtensionFilter("JPG PNG
GIF Images", "jpg", "gif","png");
BlendChooser.setFileFilter(filter);
BlendChooser.setCurrentDirectory(new File
(System.getProperty("user.home")+System.getProperty("file.separator")+
"Pictures"));
int returnVal = BlendChooser.showOpenDialog(GeometriApp.this);
if(returnVal == JFileChooser.APPROVE_OPTION) {
System.out.print("\n Open \nDirectory :
"+BlendChooser.getCurrentDirectory()+"\nFilename :
"+BlendChooser.getSelectedFile().getName());
blend=BlendChooser.getCurrentDirectory()
+"/"+BlendChooser.getSelectedFile().getName();
try {
BlendImage = ImageIO.read(new File(blend));
}
catch (IOException ex) {
System.out.print("Error!");
}Graphics2D g2d = image.createGraphics();
g2d.setComposite(AlphaComposite.SrcOver.derive((float)0.5F));
int Xx = ((image.getWidth()/2) - (BlendImage.getWidth()/2));
int Yy = ((image.getHeight()/2) - (BlendImage.getHeight()/2));
g2d.drawImage(BlendImage, Xx, Yy, null);
g2d.dispose();
take.setIcon(new ImageIcon(image));
}
}

/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code
(optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the
default look and feel.
* For details see
http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info :
javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {

java.util.logging.Logger.getLogger(GeometriApp.class.getName()).log(java.util
.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(GeometriApp.class.getName()).log(java.util
.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {

java.util.logging.Logger.getLogger(GeometriApp.class.getName()).log(java.util
.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {

java.util.logging.Logger.getLogger(GeometriApp.class.getName()).log(java.util
.logging.Level.SEVERE, null, ex);
}
//</editor-fold>

/* Create and display the form */


java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new GeometriApp().setVisible(true);
}
});
}

// Variables declaration - do not modify


private javax.swing.JButton BirghtnessMinus;
private javax.swing.JButton Blend;
private javax.swing.JButton BrightnessPlus;
private javax.swing.JButton ClearEffect;
private javax.swing.JButton ContrasPlus;
private javax.swing.JButton ContrastMunus;
private javax.swing.JButton Edge;
private javax.swing.JButton Grayb;
private javax.swing.JButton HorizontalFlip;
private javax.swing.JButton Invers;
private javax.swing.JButton LeftRotate;
private javax.swing.JButton RightRotate;
private javax.swing.JButton Sharp;
private javax.swing.JButton SunEffect;
private javax.swing.JButton Threshold;
private javax.swing.JButton VerticalFlip;
private javax.swing.JButton ZoomIn;
private javax.swing.JButton ZoomOut;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JMenu jMenu1;
private javax.swing.JMenuBar jMenuBar1;
private javax.swing.JMenuItem jMenuItem1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JLabel take;
// End of variables declaration
}