3.5. Pembuatan Rancangan Tampilan Aplikasi
Form Menu adalah satu-satunya form yang muncul saat aplikasi dijalankan. Rancangan Menu dapat dilihat seperti pada Gambar 3.10.
Gambar 3.10 Rancangan Form Menu
Keterangan: 1. Label yang berisi logo aplikasi
2. Label untuk memilih sumber file 3. Tombol untuk menampilkan dialog pilih file input.
4. Label untuk memilih target file 5. Tombol untuk menampilkan dialog pilih file output.
6. Label untuk memilih sumber file 7. Radiobutton untuk memilih metode LZMA
Input
3
Output
5
Source
2
Target
4
Tindakan
9
Algoritma
6
LZMA
7
RLE
8
Kompresi
10
Dekompresi
11
Mulai
12
Reset
13
Keluar
14 15
LZMA AND RLE COMPRESSED
1
8. Radiobutton untuk memilih metode Run Length Encoding 9. Label untuk memilih tindakan
10. Radiobutton untuk memilih tindakan kompresi 11. Radiobutton untuk memilih tindakan dekompresi
12. Tombol untuk memulai proses kompresi. 13. Tombol untuk reset sumber dan target file
14. Tombol untuk keluar dari program 15. Label untuk ringkasan hasil proses kompresi ataupun dekompresi
BAB 4
IMPLEMENTASI DAN PENGUJIAN
4.1. Implementasi Sistem
Implementasi dari aplikasi dirancang dengan menggunakan bahasa pemrograman Java dengan JDK versi 1.7. Penggunaan bahasa pemrograman Java bertujuan untuk
memberikan kemudahan kepada penulis dalam pembuatan source code dan tampilan aplikasi. Bahasa pemrograman Java dipilih oleh penulis karena bahasa pemrograman
Java merupakan bahasa yang bersifat opensource.
Proses implementasi sistem yang terjadi di dalam aplikasi yang dirancang dibagi menjadi dua, yaitu:
1. Implementasi LZMA untuk melakukan kompresi dan dekompresi terhadap citra bmp citra png.
2. Implementasi RLE untuk melakukan kompresi dan dekompresi terhadap citra
bmp citra png. Hal tersebut bertujuan untuk mengetahui bagaimana kinerja aplikasi secara
garis besar sebelum aplikasi dijalankan. Sebagai contoh, input citra bmp yang dapat dilihat seperti pada gambar 4.1.
Gambar 4.1. Citra Berformat BMP
Proses yang dilakukan pertama kali adalah mendapatkan byte array dari file citra input dengan menggunakan potongan kode program yang dapat dilihat pada tabel
4.1.
Tabel 4.1. Potongan kode program untuk mendapatkan byte array dari citra
No Kode Program
Keterangan
1 public static byte[] getBytesString name
throws Exception{ Deklarasi nama fungsi
2 FileInputStream fis = new
FileInputStreamname; Deklarasi
variabel objek
dari class
FileInputStream 3
ByteArrayOutputStream baos = new ByteArrayOutputStream;
Deklarasi variabel
objek dari
class ByteArrayOutputStream
4 byte[] bytes = new byte[1];
Deklarasi array byte sebanyak 1 array yang akan digunakan sebagai buffer
5 long file = new Filename.length;
Deklarasi variabel dengan tipe data long yang nilainya sebesar ukuran file citra
6 forint a=0; afile;a++{
Deklarasi looping dari a=0 sampai dengan a ukuran file citra
7 fis.readbytes;
Proses membaca bytes yang ada pada file 8
baos.writea; baos.flush;
Proses penulisan nilai byte yang telah dibaca kedalam
objek dari
class ByteArrayOutputStream
9 }return baos.toByteArray;}
Pengembalian nilai berupa array byte dari file citra
Berdasarkan potongan kode program pada tabel 4.1. maka potongan byte array dari file citra input adalah sebagai berikut:
-119, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 4, -62, 0, 0, 2, 107, 8, 2, 0, 0, 0, -115, -42, -88, -21, 0, 0, 0, 1, 115, 82, 71, 66, 0, -82, -50, 28, -23, 0, 0, 0, 4,
103, 65, 77, 65, 0, 0, -79, -113, 11, -4, 97, 5, 0, 0, 0, 32, 99, 72, 82, 77, 0, 0, 122, 38, 0, 0, -128, -124, 0, 0, -6, 0, 0, 0, -128, -24, 0, 0, 117, 48, 0, 0, -22, 96, 0, 0, 58, -104, 0,
0, 23, 112, -100, -70, 81, 60, 0, 0, -1, -114, 73, 68, 65, 84, 120, 94, -20, -3, 5, 116, 20, -39, -34, 54, 124, -113, 67, -110, 118, -9, -72, -109, -32, 62, 12, 14, 51, -56, 8, 48, -56,
12, -61, -32, -18, -18, 78, 18, -100, -32, 22, -126, 67, 2, 68, 72, -120, 43, 9, 49, 44, - 18, 33, -82, 4, 66, -124, 24, -10, 86, -41, -75, -85, -103, 3, -25, 62, -25, 126, -98, -11, -
82, 111, 125, -33, -6, -70, -41, 111, 13, 59, -43, -35, -43, 86, 85, -35, -41, -4, 107, -17, -3, -27, -121, 15, 31, -66, 96, 46, 37, 77, -17, 117, 109, 52, -66, 100, -2, -2, -14, 75,
93, -109, 44, -6, -25, 29, 63, -71, 23, -71, 47, -77, -26, 47, -65, 36, -85, -3, -14, -61, 59, -26, 42, 102, 109, 95, 126, -115, 37, 31, -104, -11, 127, 96, 30, -13, -19, 7, 114, -
81, -9, -52, 19, -44, 61, -30, 123, 102, 17, -82, -7, -14, 3, 89, -37, -105, -52, 35, 126, 8, -30, 43, -84, -10, -35, 103, -9, -3, 82, -9, 114, -103, -11, 127, -11, 5, -13, -12, -66,
96, -98, -34, 23, -52, -115, -34, -21, 94, -75, -18, 110, -52, -115, 117, -81, -128, -66, 15, 7, -26, -91, 81, -51, -49, -34, 13, -35, 77, 117, -49, 70, -9, 62, -109, 71, 124, -49,
60, -12, …
4.1.1. Implementasi Kompresi Dan Dekompresi Menggunakan Lempel-Ziv- Markov Chain Algorithm LZMA
untuk melakukan kompresi file citra dengan LZMA, penulis menerapkannya dengan menggunakan library tambahan sebagaimana telah dijelaskan pada sub-bab 1.3.
Potongan kode program untuk menjalankan proses kompresi dengan LZMA menggunakan library tambahan dapat dilihat pada Tabel 4.2.
Tabel 4.2. Potongan kode program untuk melakukan kompresi dengan LZMA
No. Kode Program
Keterangan
1. String[] args = new String[]{e,jTextField1.getText,
jTextField2.getText}; Deklarasi nama variabel yang
berisi informasi nama file input dan nama file output
kompresi. 2.
Date start = new Date; Deklarasi nama variabel untuk
mencatat waktu mulai kompresi.
3. try {
LzmaAlone.mainargs; } catch Exception ex {
ex.printStackTrace; }
Perintah untuk memulai kompresi dengan LZMA.
Potongan kode program pada Tabel 4.2. akan melakukan kompresi pada byte array yang diberikan sebagai input. Apabila kode program pada Tabel 4.2. dijalankan
menggunakan byte array dari file citra input akan menghasilkan sebuah file output yang isinya dapat dilihat seperti pada Gambar 4.2.
Gambar 4.2. File Hasil Kompresi Citra BMP Menggunakan LZMA
4.1.2. Implementasi Kompresi Dan Dekompresi Menggunakan Run Length Encoding
Sedangkan potongan kode program untuk melakukan kompresi dengan Run Length Encoding dapat dilihat seperti pada Tabel 4.3.
Tabel 4.3. Potongan kode program untuk melakukan kompresi dengan RLE
No Kode Program
Keterangan
1 public void compressString input_file,String
output_file throws IOException{ Deklarasi nama fungsi
2 long start_time=0;
Deklarasi nama variabel 3
ifreport_filenames{ System.out.printlnoriginal file:+input_file;
System.out.printlnCompressed file:+output_file;}
Jika laporan file hasil ingin ditampilkan
4 ifreport_times{
start_time=System.currentTimeMillis;} Jika waktu mulai kompresi ingin ditampilkan
5 int zerf=0;
int onef=0; Deklarasi nama variabel
6 try{
in=new FileInputStreaminput_file; out=new FileOutputStreamoutput_file;
byte[]array=new byte[1]; int rb;
int last=-1; int lastbo=-2;
int c; Deklarasi nama variabel dalam blok try
7 whilec=getc=-1 {
putcc; iflastbo==last {
ifc==last { int count=0;
whilec=getc=0 { ifc==last {
count++;} else {
break;} } ifc0 {
ifcount=256count256==0{ count-=256;}
else { ifcount==0
count=-1;} } ifcount=0{
putccount;} whilecount=count-256=0{
putclast;} ifc=0{
putcc; }}}
lastbo=last; last=c;}
in.close; out.close;
}catchException e{ System.out.printlnerror
while processing
file; e.printStackTrace;}
Proses kompresi
dengan Run
Length Encoding
8 ifreport_times{
start_time=System.currentTimeMillis- start_time;
System.out.printlntimetaken:+start_time10 100F+seconds;}
Proses penghitungan waktu yang dihabiskan selama kompresi
9 ifreport_size{
File f1=new Fileinput_file; File f2=new Fileoutput_file;
long f11=f1.length; long f21=f2.length;
System.out.printlnoriginal
file size
:+f11+bytes; System.out.printlncompressed
file size
:+f21+bytes; Proses penghitungan besar ukuran file
sebelum dan setelah kompresi
10 iff11f21{
System.out.printlncompressed by
:+f11- f21+bytes;}
else{ System.out.printlnfile gained in size by
+f21-f11+bytes;} Jika ukuran file setelah proses kompresi lebih
besar dari sebelum dilakukan kompresi
11 iff11==0L{
f11=1L;} Jika ukuran file setelah kompresi sama
dengan nol. 12
System.out.printlncompression ratio
:+f11-f2110000f11100F+;} System.out.println;}
Proses penghitungan rasio ukuran file setelah kompresi dan sebelum kompresi
Potongan kode program pada Tabel 4.3. akan melakukan kompresi pada byte array yang diberikan sebagai input. Apabila kode program pada Tabel 4.3. dijalankan
menggunakan byte array dari file citra input akan menghasilkan sebuah file output yang isinya dapat dilihat seperti pada Gambar 4.3.
Gambar 4.3. File Hasil Kompresi Citra BMP Menggunakan RLE
Kompresi citra yang dilakukan menggunakan Lempel-Ziv-Markov Chain Algorithm LZMA maupun dengan Run Length Encoding mengkompresi setiap bytes dari
gambar yang kita input untuk dikompresi menjadi file terkompresi berformat .erl.
4.2. Pengujian Aplikasi