Upload
duongdien
View
230
Download
0
Embed Size (px)
Citation preview
35
BAB III
ANALISA DAN PERANCANGAN
3.1. Analisa Masalah
Berdasarkan analisa yang dilakukan peneliti, permasalahan pokok saat
seseorang ingin melakukan tes buta warna, orang tersebut harus melakukan
pemeriksaan ke dokter spesialis mata secara langsung. Biaya yang dikeluarkan
untuk melakukan pemeriksaan tersebut tidak bias dikatakan murah. Belum lagi jika
orang tersebut tergolong orang yang sibuk, sehingga kesulitan mencari waktu untuk
melakukan pemeriksaan.
Permasalahan pokok selanjutnya pada para penderita buta warna. Para
penderita buta warna tidak bisa melihat warna tertentu dengan jelas. Sulit bagi
mereka memahami warna tertentu. Sebagai contoh orang yang mengalami buta
warna hijau, saat melihat warna hijau bukanlah warna hijau yang dilihat melainkan
warna lain.
3.2. Analisa Kebutuhan
A. Kebutuhan Pengguna
Tabel III.1 Analasis Kebutuhan Pengguna
Pengguna Keterangan
User
a. User dapat melakukan pendeteksian warna benda dengan
kamera smartphone
b. User dapat melihat hasil deteksi warna berupa teks
c. User dapat mendengarkan hasil deteksi warna berupa suara
d. User dapat melakukan tes deteksi buta warna dengan metode
ishihara
e. User dapat melihat hasil tes ishihara
36
f. User dapat melihat informasi petunjuk penggunaan aplikasi
g. User dapat melihat informasi tentang aplikasi
h. User dapat melihatdata riwayat tes deteksi buta warna
i. User dapat melihat detail riwayat tes deteksi buta warna
j. User dapat menghapus data riwayat tes deteksi buta warna
k. User dapat keluar aplikasi
B. Kebutuhan Sistem
Tabel III.2 Analasis Kebutuhan Sistem
Kebutuhan Sistem Keterangan
Input
a. User dapat menginput data diri sebelum melakukan tes
buta warna
b. User dapat menginput jawaban dari soal tes ishihara
c. User dapat menyimpan hasil tes ishihara
d. User dapat mengambil gambar benda untuk mendeteksi
warna benda
Output
a. Sistem dapat menampilkan form data diri pengujian tes
buta warna
b. Sistem dapat menampilkan gambar-gambar tes ishihara
c. Sistem dapat menampilkan soal pertanyaan dan pilihan
jawaban tes ishihara
d. Sistem dapat menampilkan detail hasil tes ishihara
e. Sistem dapat menjalankan kamera smartphone saat
mendeteksi warna benda
f. Sistem dapat mengambil objek benda dengan kamera
smartphone
g. Sistem dapat menampilkan foto hasil jepretan kamera
beserta detail lokasi penyimpanan foto
h. Sistem dapat memberikan hasil warna benda dengan teks
dan suara
i. Sistem dapat menampilkan informasi petunjuk
penggunaan aplikasi
j. Sistem dapat menampilkan informasi tentang aplikasi
k. Sistem dapat menampilkan data riwayat tes ishihara
l. Sistem dapat menampilkan detail data riwayat tes
ishihara
37
C. Kebutuhan Hardware
Untuk membuat aplikasi “Color and Blindness Detection” spesifikasi minimum
hardware yang dibutuhkan adalah :
a. Kebutuhan Perangkat Keras Perancangan Aplikasi
1. Laptop/PC dengan Processor minimal AMD A8 atau Intel Core i3
@2.20 GHz
2. RAM minimal 4GB
b. Kebutuhan Perangkat Keras Pengguna Aplikasi
1. Smartphone Android
2. RAM minimal 2 GB
D. Kebutuhan Software
Dalam merancang aplikasi “Color and Blindness Detection” ini, menggunakan
beberapa software penting seperti :
a. Kebutuhan Perangkat Lunak Perancangan Aplikasi
1. Android Studio (Proses coding dengan bahasa Java)
2. JDK (Java Development Kit)
3. Android Software Development Kit (SDK)
4. Sistem Operasi Windows 10
b. Kebutuhan Perangkat Lunak Pengguna Aplikasi
Perangkat lunak yang digunakan untuk menjalankan aplikasi “Color and
Blindness Detection” berbasis Android adalah Android versi minimal 5.0
Lollipop.
38
3.3. Perancangan
3.3.1. Perancangan Objek
A. Use Case Diagram
Gambar III.1 Use Case Diagram User
Tabel III.3 Use Case Description Deteksi Warna
Use Case Name Melakukan deteksi warna benda
Requirements User melakukan deteksi warna benda
Goal User mendapatkan hasil deteksi berupa teks dan
suara
Pre-conditions User menjalankan aplikasi
Post-conditions User mendapatkan hasil deteksi berupa teks dan
suara
Failed end conditions User tidak bisa melakukan pengambilan gambar
dengan kamera smartphone
Primary actors User
Main flow/basic path
1. User menjalankan aplikasi
2. Pilih menu “Color Detection”
3. Sistem akan menjalankan kamera smartphone
4. Ambil gambar dan klik tanda centang
5. Klik tombol “Cek Warna”
6. User mendapatkan hasil analisa warna berupa teks
dan suara
Invariant A -
39
Tabel III.4 Use Case Description Tes Ishihara
Use Case Name Melakukan tes ishihara
Requirements User melakukan deteksi buta warna dengan tes
ishihara
Goal User mendapatkan hasil analisa tes ishihara dan
dapat menyimpannya
Pre-conditions User menjalankan aplikasi
Post-conditions User mendapatkan hasil analisa tes ishihara dan
dapat menyimpannya
Failed end conditions User tidak bisa melakukan tes ishihara
Primary actors User
Main flow/basic path
1. User menjalankan aplikasi
2. Pilih menu “Blindness Detection”
3. Input data berupa nama, usia, dan jenis kelamin
4. Klik “OK”
5. Menjawab pertanyaan tes dengan membaca angka
pada plate ishihara (tes ada 25 soal)
6. Sistem menampilkan hasil
7. Klik “Info Skor”
8. Sistem akan menampilkan detail hasil tes ishihara
9. Klik “Simpan” untuk menyimpan hasil tes
10. Sistem akan menyimpan hasil tes di “Riwayat
Tes”
Invariant A -
Tabel III.5 Use Case Description Melihat Informasi Petunjuk
Penggunaan Aplikasi
Use Case Name Melihat informasi petunjuk penggunaan aplikasi
Requirements User melihat informasi petunjuk penggunaan aplikasi
Goal User dapat melihat informasi petunjuk penggunaan
aplikasi
Pre-conditions User menjalankan aplikasi
Post-conditions User dapat melihat informasi petunjuk penggunaan
aplikasi
Failed end conditions User tidak dapat melihat informasi petunjuk
penggunaan aplikasi
Primary actors User
Main flow/basic path 1. User menjalankan aplikasi
2. Pilih menu “Petunjuk”
Invariant A -
40
Tabel III.6 Use Case Description Melihat Informasi Tentang Aplikasi
Use Case Name Melihat informasi tentang aplikasi
Requirements User melihat informasi tentang aplikasi
Goal User dapat melihat informasi tentang aplikasi
Pre-conditions User menjalankan aplikasi
Post-conditions User dapat melihat informasi tentang aplikasi
Failed end conditions User tidak dapat melihat informasi tentang aplikasi
Primary actors User
Main flow/basic path 1. User menjalankan aplikasi
2. Pilih menu “Tentang Aplikasi”
Invariant A -
Tabel III.7 Use Case Description Melihat Riwayat Tes Ishihara
Use Case Name Melihat riwayat tes ishihara
Requirements User melihat riwayat tes ishihara
Goal User dapat melihat riwayat tes ishihara
Pre-conditions User menjalankan aplikasi
Post-conditions User dapat melihat riwayat tes ishihara
Failed end conditions User tidak dapat melihat riwayat tes ishihara
Primary actors User
Main flow/basic path
1. User menjalankan aplikasi
2. Pilih menu “Riwayat Tes”
3. Pilih salah satu data
4. Sistem menampilkan detail hasil riwayat tes
Invariant A -
Tabel III.8 Use Case Description Menghapus Riwayat Tes Ishihara
Use Case Name Menghapus riwayat tes ishihara
Requirements User menghapus riwayat tes ishihara
Goal User dapat menghapus riwayat tes ishihara
Pre-conditions User menjalankan aplikasi
Post-conditions User dapat menghapus riwayat tes ishihara
Failed end conditions User tidak dapat menghapus riwayat tes ishihara
Primary actors User
Main flow/basic path 1. User menjalankan aplikasi
2. Pilih menu “Riwayat Tes”
41
3. Pilih salah satu data
4. Sistem menampilkan detail hasil riwayat tes
5. Klik “Hapus”
Invariant A -
Tabel III.9 Use Case Description Keluar Aplikasi
Use Case Name Keluar aplikasi
Requirements User keluar aplikasi
Goal User dapat keluar aplikasi
Pre-conditions User menjalankan aplikasi
Post-conditions User dapat keluar aplikasi
Failed end conditions User tidak dapat keluar aplikasi
Primary actors User
Main flow/basic path 1. User menjalankan aplikasi
2. Pilih menu “Keluar Aplikasi”
Invariant A -
B. Sequence Diagram
Gambar III.2 Sequence Diagram User
42
C. Activity Diagram
Gambar III.3 Activity Diagram User Mendeteksi Warna Benda
43
Gambar III.4 Activity Diagram User Melakukan Tes Ishihara
44
3.3.2. Perancangan Sisitem/Aplikasi
A. Prototype
Gambar III.5 Prototype Menu Utama
Gambar III.6 Prototype Kamera
45
Gambar III.7 Prototype Hasil Kamera
Gambar III.8 Prototype Hasil Deteksi Warna
46
Gambar III.9 Prototype Input Data
Gambar III.10 Prototype Tes Ishihara
47
Gambar III.11 Prototype Hasil Tes
Gambar III.12 Prototype Detail Hasil Tes
48
Gambar III.13 Prototype Petunjuk Penggunaan Aplikasi
Gambar III.14 Prototype Tentang Aplikasi
49
Gambar III.15 Prototype Data Riwayat Tes
Gambar III.16 Prototype Konfirmasi Keluar
50
B. Rancangan Algoritma
Rancangan Algoritma pada aplikasi ini adalah Metode Ishihara pada fitur
deteksi buta warna dan Metode RGB pada pendeteksian warna benda. Berikut
listing program untuk Metode Isihara :
ket="Buta Warna Parsial";
int n=Integer.parseInt(nilai);
if(n<=12 ){
ket="Buta warna Total";
}else if(n>12 && n<25){
ket="Buta warna Parsial";
}else{
ket="Tidak Buta Warna";
}
Pada listing program diatas menjelaskan bahwa apabila skor nilai tes
ishihara yang terdiri dari 25 soal berhasil dijawab dengan benar semua, maka
keterangan hasilnya dalah “Tidak Buta Warna”. Jika skor nilainya kurang atau sama
dengan 12, maka keterangan hasilnya adalah “Buta Warna Total”. Serta jika skor
nilainya lebih dari 12 namun kurang dari 25 (13-24), maka keterangan hasilnya
adalah “Buta Warna Parsial”.
Untuk metode RGB dalam pendeteksian warna, diambil nilai
heksadesimal tiap nilai R, G, B dengan nilai toleransi up dan down = 20. Untuk
pengambilan titikcitra diambil nilai x dan y dari kamera sehingga menghasilkan
titik citra berada tepat di tengah. Berikut listing program untuk pengambilan titik
citra :
private void Proses(String path) {
BitmapFactory.Options opt = new BitmapFactory.Options();
opt.inPreferredConfig = Bitmap.Config.ARGB_8888;
opt.inSampleSize = 5;
Bitmap mBitmap1 = BitmapFactory.decodeFile(path, opt);//"/sdcard/pic1.jpg"
int xc=mBitmap1.getWidth()/2;
int yc=mBitmap1.getHeight()/2
51
Pada listing program diatas, pada saat pengambilan gambr dengan kamera
smartphone, titi citra diambil dengan nilai x (lebar:2) dan y (tinggi :2). Untuk
gambar yang telah diambil oleh kamera dikonvert menjadi bitmap lalu disimpan
pada SDCard. Untuk proses RGB, berikut listing program algoritmanya:
String getValue(int R,int G,int B){
String warna="?="+R+":"+G+":"+B;
int down=20,up=20;
if ((R>=108 && R<=148) && (G>=108 && G<=148) && (B>=108 &&
B<=148)){warna="Abu-Abu";}
else if ((R>=0 && R<=20) && (G>=0 && G<=20) && (B>=225 && B<=255))
{warna="Biru";}
else if ((R>=0 && R<=20) && (G>=0 && G<=20) && (B>=108 && B<=148)) {warna="Biru
Dongker";}
else if ((R>=0 && R<=20) && (G>=225 && G<=255) && (B>=225 && B<=255))
{warna="Biru Laut";}
else if ((R>=130 && R<=180) && (G>=55 && G<=105) && (B>=0 && B<=20))
{warna="Coklat";}
else if ((R>=225 && R<=255) && (G>=195 && G<=235) && (B>=0 && B<=20))
{warna="Emas";}
else if ((R>=0 && R<=20) && (G>=225 && G<=255) && (B>=0 && B<=20))
{warna="Hijau";}
else if ((R>=0 && R<=20) && (G>=0 && G<=20) && (B>=0 && B<=20))
{warna="Hitam";}
else if ((R>=225 && R<=255) && (G>=225 && G<=255) && (B>=0 && B<=20))
{warna="Kuning";}
else if ((R>=225 && R<=255) && (G>=0 && G<=20) && (B>=225 && B<=255))
{warna="Magenta";}
else if ((R>=225 && R<=255) && (G>=0 && G<=20) && (B>=107 && B<=147))
{warna="Merah Mawar";}
else if ((R>=225 && R<=255) && (G>=0 && G<=20) && (B>=0 && B<=20))
{warna="Merah";}
else if ((R>=108 && R<=148) && (G>=0 && G<=20) && (B>=0 && B<=20))
{warna="Merah Marun";}
else if ((R>=225 && R<=255) && (G>=172 && G<=212) && (B>=183 && B<=223))
{warna="Merah Jambu";}
else if ((R>=91 && R<=131) && (G>=0 && G<=20) && (B>=225 && B<=255))
{warna="Nila";}
else if ((R>=225 && R<=255) && (G>=107 && G<=147) && (B>=0 && B<=20))
{warna="Oranye";}
else if ((R>=172 && R<=212) && (G>=172 && G<=212) && (B>=172 && B<=212))
{warna="Perak";}
else if ((R>=225 && R<=255) && (G>=225 && G<=255) && (B>=225 && B<=255))
{warna="Putih";}
else if ((R>=171 && R<=211) && (G>=0 && G<=20) && (B>=225 && B<=255))
{warna="Ungu";}
else if ((R>=123 && R<=163) && (G>=0 && G<=20) && (B>=225 && B<=255))
{warna="Violet";}
else if ((R>=108 && R<=148) && (G>=108 && G<=148) && (B>=0 && B<=20))
{warna="Zaitun";}
52
else if ((R>=190 && R<=255) && (G>=0 && G<=50) && (B>=0 && B<=50))
{warna="Merah 200 49 42";}
return warna;
}
}
Pada listing diatas, dijelaskan bahwa nilai RGB masing-masing warna
dalam bentuk bilangan heksadeimal dengan nilai toleransi up dan down = 20.
C. Rancangan Software Architecture
1. Listing Program Soal-Soal Ishihara
package com.example.melati.colorandblindnessdetection;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.res.Resources;
import android.content.res.Resources.NotFoundException;
import android.text.Html;
import android.text.TextUtils;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.View;
import android.widget.ImageView;
import android.widget.RadioButton;
import android.widget.TextView;
import android.widget.Toast;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.graphics.drawable.Drawable;
public class soalsoal extends Activity {
RadioButton radA, radB, radC, radD;
String sNama = "Fulan", sUsia = "xx", sJK = "Laki-laki", sCatatan = "";
int ke = 0, jumsoal = 25, jumBenar = 0;
int i;
String[] arr_idsoal;
String[] arr_pertanyaan;
String[] arr_jawabA;
String[] arr_jawabB;
String[] arr_jawabC;
53
String[] arr_jawabD;
String[] arr_jawabBenar;
int[] arr_gambar;
static final String KEY_record = "soal";
public static final String KEY_pertanyaan = "pertanyaan";
public static final String KEY_jawabA = "jawabA";
public static final String KEY_jawabB = "jawabB";
public static final String KEY_jawabC = "jawabC";
public static final String KEY_jawabD = "jawabD";
public static final String KEY_jawabBenar = "jawabBenar";
public static final String KEY_gambar = "gambar";
public static final String KEY_idsoal = "idsoal";
ImageView imgGambar;
TextView txtTanya, txtTanyake;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.soalsoal);
Intent i = this.getIntent();
sNama = i.getStringExtra("nama");
sUsia = i.getStringExtra("usia");
sJK = i.getStringExtra("jk");
callData();
txtTanya = (TextView) findViewById(R.id.txtTanya);
txtTanyake = (TextView) findViewById(R.id.txtTanyaKe);
imgGambar = (ImageView) findViewById(R.id.myGambar);
radA = (RadioButton) findViewById(R.id.radA);
radA.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
cekJawaban("A");
ke = ke + 1;
if (ke >= jumsoal) {
selesai();
} else {
lihat();
}
}
});
radB = (RadioButton) findViewById(R.id.radB);
radB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
cekJawaban("B");
ke = ke + 1;
if (ke >= jumsoal) {
selesai();
} else {
lihat();
}
54
}
});
radC = (RadioButton) findViewById(R.id.radC);
radC.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
cekJawaban("C");
ke = ke + 1;
if (ke >= jumsoal) {
selesai();
} else {
lihat();
}
}
});
radD = (RadioButton) findViewById(R.id.radD);
radD.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
cekJawaban("D");
ke = ke + 1;
if (ke >= jumsoal) {
selesai();
} else {
lihat();
}
}
});
lihat();
}
void cekJawaban(String pil)
{
if (arr_jawabBenar[ke].equals(pil)) {
jumBenar = jumBenar + 1;
sCatatan = sCatatan + "Soal ke-" + (ke + 1) + " Benar\n";
//Toast.makeText(getBaseContext(), " Pilihan Anda " + pil + " :
Benar!", Toast.LENGTH_LONG).show();
} else {
sCatatan = sCatatan + "Soal ke-" + (ke + 1) + " Salah\n";
//Toast.makeText(getBaseContext(), " Pilihan Anda " + pil + " :
Salah!", Toast.LENGTH_LONG).show();
}
}
//mp3
void lihat() {
radA.setChecked(false);
radB.setChecked(false);
radC.setChecked(false);
radD.setChecked(false);
int ike = ke;
txtTanya.setText((ke + 1) + "." + arr_pertanyaan[ike]);
radA.setText(arr_jawabA[ike]);
radB.setText(arr_jawabB[ike]);
radC.setText(arr_jawabC[ike]);
55
radD.setText(arr_jawabD[ike]);
txtTanyake.setText("Pertanyaan ke " + (ke + 1) + " dari " + jumsoal);
imgGambar.setImageResource(arr_gambar[ike]);
}
public void selesai() {
new AlertDialog.Builder(this)
.setTitle("Hasil Tes")
.setMessage( sNama + "\nUsia:" + sUsia + " thn\nSkor anda : "
+ jumBenar + " Point")
.setNeutralButton("INFO SKOR", new OnClickListener() {
public void onClick(DialogInterface dlg, int sumthin)
{
finish();
Intent put = new Intent(getBaseContext(),
hasil.class);
put.putExtra("nama", sNama);
put.putExtra("usia", sUsia);
put.putExtra("jk", sJK);
put.putExtra("nilai",
String.valueOf(jumBenar));
put.putExtra("catatan", sCatatan);
startActivity(put);
}
})
.show();
}
public void keluarYN() {
AlertDialog.Builder ad = new AlertDialog.Builder(soalsoal.this);
ad.setTitle("Konfirmasi");
ad.setMessage("Keluar Tes?");
ad.setPositiveButton("Ya", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
});
ad.setNegativeButton("Tidak", new OnClickListener() {
public void onClick(DialogInterface arg0, int arg1) {
}
});
ad.show();
}
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
keluarYN();
return true;
}
return super.onKeyDown(keyCode, event);
}
56
void callData() {
i = 25;
arr_idsoal = new String[i];
arr_pertanyaan = new String[i];
arr_jawabA = new String[i];
arr_jawabB = new String[i];
arr_jawabC = new String[i];
arr_jawabD = new String[i];
arr_jawabBenar = new String[i];
arr_gambar = new int[i];
// soal-soal
arr_idsoal[0] = "S01";
arr_pertanyaan[0] = "Angka berapa yang Anda lihat?";
arr_jawabA[0] = "2";
arr_jawabB[0] = "6";
arr_jawabC[0] = "26";
arr_jawabD[0] = "Tidak Ada";
arr_jawabBenar[0] = "C";
arr_gambar[0] = R.drawable.sa;
arr_idsoal[1] = "S02";
arr_pertanyaan[1] = "Angka berapa yang Anda lihat";
arr_jawabA[1] = "2";
arr_jawabB[1] = "42";
arr_jawabC[1] = "4";
arr_jawabD[1] = "Tidak Ada";
arr_jawabBenar[1] = "B";
arr_gambar[1] = R.drawable.sb;
arr_idsoal[2] = "S03";
arr_pertanyaan[2] = "Angka berapa yang Anda lihat?";
arr_jawabA[2] = "7";
arr_jawabB[2] = "47";
arr_jawabC[2] = "5";
arr_jawabD[2] = "Tidak Ada";
arr_jawabBenar[2] = "D";
arr_gambar[2] = R.drawable.sc;
arr_idsoal[3] = "S04";
arr_pertanyaan[3] = "Angka berapa yang Anda lihat";
arr_jawabA[3] = "5";
arr_jawabB[3] = "2";
arr_jawabC[3] = "7";
arr_jawabD[3] = "Tidak Ada";
arr_jawabBenar[3] = "D";
arr_gambar[3] = R.drawable.sd;
arr_idsoal[4] = "S05";
arr_pertanyaan[4] = "Angka berapa yang Anda lihat";
arr_jawabA[4] = "4";
arr_jawabB[4] = "7";
arr_jawabC[4] = "1";
arr_jawabD[4] = "Tidak Ada";
arr_jawabBenar[4] = "B";
arr_gambar[4] = R.drawable.se;
57
arr_idsoal[5] = "S06";
arr_pertanyaan[5] = "Angka berapa yang Anda lihat";
arr_jawabA[5] = "2";
arr_jawabB[5] = "5";
arr_jawabC[5] = "8";
arr_jawabD[5] = "Tidak Ada";
arr_jawabBenar[5] = "B";
arr_gambar[5] = R.drawable.sf;
arr_idsoal[6] = "S07";
arr_pertanyaan[6] = "Angka berapa yang Anda lihat";
arr_jawabA[6] = "85";
arr_jawabB[6] = "42";
arr_jawabC[6] = "45";
arr_jawabD[6] = "Tidak Ada";
arr_jawabBenar[6] = "C";
arr_gambar[6] = R.drawable.sg;
arr_idsoal[7] = "S08";
arr_pertanyaan[7] = "Angka berapa yang Anda lihat";
arr_jawabA[7] = "79";
arr_jawabB[7] = "97";
arr_jawabC[7] = "87";
arr_jawabD[7] = "Tidak Ada";
arr_jawabBenar[7] = "B";
arr_gambar[7] = R.drawable.sh;
arr_idsoal[8] = "S09";
arr_pertanyaan[8] = "Angka berapa yang Anda lihat";
arr_jawabA[8] = "2";
arr_jawabB[8] = "6";
arr_jawabC[8] = "8";
arr_jawabD[8] = "Tidak Ada";
arr_jawabBenar[8] = "A";
arr_gambar[8] = R.drawable.si;
arr_idsoal[9] = "S10";
arr_pertanyaan[9] = "Angka berapa yang Anda lihat";
arr_jawabA[9] = "21";
arr_jawabB[9] = "24";
arr_jawabC[9] = "74";
arr_jawabD[9] = "Tidak Ada";
arr_jawabBenar[9] = "C";
arr_gambar[9] = R.drawable.sj;
arr_idsoal[10] = "S11";
arr_pertanyaan[10] = "Angka berapa yang Anda lihat";
arr_jawabA[10] = "15";
arr_jawabB[10] = "17";
arr_jawabC[10] = "16";
arr_jawabD[10] = "Tidak Ada";
arr_jawabBenar[10] = "A";
arr_gambar[10] = R.drawable.sk;
arr_idsoal[11] = "S12";
arr_pertanyaan[11] = "Angka berapa yang Anda lihat";
arr_jawabA[11] = "8";
arr_jawabB[11] = "5";
58
arr_jawabC[11] = "3";
arr_jawabD[11] = "Tidak Ada";
arr_jawabBenar[11] = "C";
arr_gambar[11] = R.drawable.sl;
arr_idsoal[12] = "S13";
arr_pertanyaan[12] = "Angka berapa yang Anda lihat";
arr_jawabA[12] = "5";
arr_jawabB[12] = "2";
arr_jawabC[12] = "7";
arr_jawabD[12] = "Tidak Ada";
arr_jawabBenar[12] = "A";
arr_gambar[12] = R.drawable.sm;
arr_idsoal[13] = "S14";
arr_pertanyaan[13] = "Angka berapa yang Anda lihat";
arr_jawabA[13] = "35";
arr_jawabB[13] = "57";
arr_jawabC[13] = "55";
arr_jawabD[13] = "Tidak Ada";
arr_jawabBenar[13] = "B";
arr_gambar[13] = R.drawable.sn;
arr_idsoal[14] = "S15";
arr_pertanyaan[14] = "Angka berapa yang Anda lihat";
arr_jawabA[14] = "29";
arr_jawabB[14] = "79";
arr_jawabC[14] = "70";
arr_jawabD[14] = "Tidak Ada";
arr_jawabBenar[14] = "A";
arr_gambar[14] = R.drawable.so;
arr_idsoal[15] = "S16";
arr_pertanyaan[15] = "Angka berapa yang Anda lihat";
arr_jawabA[15] = "6";
arr_jawabB[15] = "8";
arr_jawabC[15] = "2";
arr_jawabD[15] = "Tidak Ada";
arr_jawabBenar[15] = "A";
arr_gambar[15] = R.drawable.sp;
arr_idsoal[16] = "S17";
arr_pertanyaan[16] = "Angka berapa yang Anda lihat";
arr_jawabA[16] = "9";
arr_jawabB[16] = "3";
arr_jawabC[16] = "8";
arr_jawabD[16] = "Tidak Ada";
arr_jawabBenar[16] = "C";
arr_gambar[16] = R.drawable.sq;
arr_idsoal[17] = "S18";
arr_pertanyaan[17] = "Angka berapa yang Anda lihat";
arr_jawabA[17] = "15";
arr_jawabB[17] = "12";
arr_jawabC[17] = "18";
arr_jawabD[17] = "Tidak Ada";
arr_jawabBenar[17] = "B";
arr_gambar[17] = R.drawable.sr;
59
arr_idsoal[18] = "S19";
arr_pertanyaan[18] = "Angka berapa yang Anda lihat";
arr_jawabA[18] = "98";
arr_jawabB[18] = "46";
arr_jawabC[18] = "42";
arr_jawabD[18] = "Tidak Ada";
arr_jawabBenar[18] = "C";
arr_gambar[18] = R.drawable.st;
arr_idsoal[19] = "S20";
arr_pertanyaan[19] = "Angka berapa yang Anda lihat";
arr_jawabA[19] = "5";
arr_jawabB[19] = "2";
arr_jawabC[19] = "8";
arr_jawabD[19] = "Tidak Ada";
arr_jawabBenar[19] = "D";
arr_gambar[19] = R.drawable.su;
arr_idsoal[20] = "S21";
arr_pertanyaan[20] = "Angka berapa yang Anda lihat";
arr_jawabA[20] = "28";
arr_jawabB[20] = "15";
arr_jawabC[20] = "73";
arr_jawabD[20] = "Tidak Ada";
arr_jawabBenar[20] = "C";
arr_gambar[20] = R.drawable.sv;
arr_idsoal[21] = "S22";
arr_pertanyaan[21] = "Angka berapa yang Anda lihat";
arr_jawabA[21] = "29";
arr_jawabB[21] = "16";
arr_jawabC[21] = "18";
arr_jawabD[21] = "Tidak Ada";
arr_jawabBenar[21] = "B";
arr_gambar[21] = R.drawable.sw;
arr_idsoal[22] = "S23";
arr_pertanyaan[22] = "Angka berapa yang Anda lihat";
arr_jawabA[22] = "7";
arr_jawabB[22] = "9";
arr_jawabC[22] = "2";
arr_jawabD[22] = "Tidak Ada";
arr_jawabBenar[22] = "A";
arr_gambar[22] = R.drawable.sx;
arr_idsoal[23] = "S24";
arr_pertanyaan[23] = "Angka berapa yang Anda lihat";
arr_jawabA[23] = "6";
arr_jawabB[23] = "3";
arr_jawabC[23] = "8";
arr_jawabD[23] = "Tidak Ada";
arr_jawabBenar[23] = "A";
arr_gambar[23] = R.drawable.sy;
arr_idsoal[24] = "S25";
arr_pertanyaan[24] = "Angka berapa yang Anda lihat";
arr_jawabA[24] = "29";
60
arr_jawabB[24] = "70";
arr_jawabC[24] = "28";
arr_jawabD[24] = "Tidak Ada";
arr_jawabBenar[24] = "A";
arr_gambar[24] = R.drawable.sz;
}
}
2. Listing Program Hasil Tes Ishihara
package com.example.melati.colorandblindnessdetection;
import java.util.Calendar;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.text.Html;
import android.text.TextUtils;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class hasil extends Activity {
String nama,jk,nilai,catatan,usia,ket;
myDbHelper helper=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.hasil);
helper=new myDbHelper(this);
Intent i = this.getIntent();
nama=i.getStringExtra("nama");
jk=i.getStringExtra("jk");
nilai=i.getStringExtra("nilai");
catatan=i.getStringExtra("catatan");
usia=i.getStringExtra("usia");
ket=i.getStringExtra("ket");
//settek ni di snii ngmbil dari yng hasil.xml
TextView txtNama=(TextView)findViewById(R.id.hnama);
TextView txtUsia=(TextView)findViewById(R.id.husia);
TextView txtNilai=(TextView)findViewById(R.id.hNilai);
TextView txtKet=(TextView)findViewById(R.id.hketerangan);
TextView txtInfo=(TextView)findViewById(R.id.hcatatan);
txtNama.setText(nama);
txtNilai.setText(nilai);
txtKet.setText(ket);
txtUsia.setText(usia);
txtInfo.setText(catatan);
61
ket="Buta Warna Parsial";
int n=Integer.parseInt(nilai);
if(n<=12 ){
ket="Buta warna Total";
}else if(n>12 && n<25){
ket="Buta warna Parsial";
}else{
ket="Tidak Buta Warna";
}
Button btnSimpan= (Button) findViewById(R.id.hSimpan);
btnSimpan.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
helper.insertDb(nama, usia, jk,nilai,ket);
Intent i=new Intent(hasil.this,MenuUtama.class);
finish();
startActivity(i);
}
});
Button btnKembali= (Button) findViewById(R.id.hKembali);
btnKembali.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
finish();
}
});
}
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
finish();
return true;
}
return super.onKeyDown(keyCode, event);
}
}
3. Listing Program Camera Color Detection
package com.example.melati.colorandblindnessdetection;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.ContentValues;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.provider.MediaStore;
62
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import java.io.IOException;
public class Camera extends Activity {
final static int CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE = 1;
public static String Path="";
Uri imageUri = null;
static TextView imageDetails = null;
public static ImageView showImg = null;
Camera CameraActivity = null;
Button btnCek;
TextView txthasil;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.getcamera);
CameraActivity = this;
imageDetails = (TextView) findViewById(R.id.imageDetails);
showImg = (ImageView) findViewById(R.id.showImg);
txthasil= (TextView) findViewById(R.id.txthasil);
btnCek= (Button) findViewById(R.id.btnCek);
btnCek.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.v("Baca","Path="+Path);
Proses(Path);
} });
String fileName = "Camera_Example.jpg";
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.TITLE, fileName);
values.put(MediaStore.Images.Media.DESCRIPTION,"Image capture by camera");
imageUri = getContentResolver().insert(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {
if (resultCode == RESULT_OK) {
String imageId = convertImageUriToFiles(imageUri,CameraActivity);
63
new LoadImagesFromSDCard().execute(""+imageId);
} else if (resultCode == RESULT_CANCELED) {
Toast.makeText(this, "Picture was not taken", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "Picture was not taken", Toast.LENGTH_SHORT).show();
}
}
}
private void Proses(String path) {
BitmapFactory.Options opt = new BitmapFactory.Options();
opt.inPreferredConfig = Bitmap.Config.ARGB_8888;
opt.inSampleSize = 5;
Bitmap mBitmap1 = BitmapFactory.decodeFile(path, opt);//"/sdcard/pic1.jpg"
int xc=mBitmap1.getWidth()/2;
int yc=mBitmap1.getHeight()/2;
int pixel = mBitmap1.getPixel(xc,yc);
int redValue = Color.red(pixel);
int blueValue = Color.blue(pixel);
int greenValue = Color.green(pixel);
String v=getValue(redValue,greenValue,blueValue);
playSuara(v);
txthasil.setText(v);
}
public static String convertImageUriToFiles (Uri imageUri, Activity activity) {
Cursor cursor = null;
int imageID = 0;
try {
String [] proj={
MediaStore.Images.Media.DATA,
MediaStore.Images.Media._ID,
MediaStore.Images.Thumbnails._ID,
MediaStore.Images.ImageColumns.ORIENTATION
};
cursor = activity.managedQuery(
imageUri, // Get data for specific image URI
proj, // Which columns to return
null, // WHERE clause; which rows to return (all rows)
null, // WHERE clause selection arguments (none)
null // Order-by clause (ascending by name)
);
int columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID);
int columnIndexThumb =
cursor.getColumnIndexOrThrow(MediaStore.Images.Thumbnails._ID);
int file_ColumnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
//int orientation_ColumnIndex =
cursor.getColumnIndexOrThrow(MediaStore.Images.ImageColumns.ORIENTATION);
64
int size = cursor.getCount();
if (size == 0) {
imageDetails.setText("No Image");
}
else
{
int thumbID = 0;
if (cursor.moveToFirst()) {
imageID = cursor.getInt(columnIndex);
thumbID = cursor.getInt(columnIndexThumb);
Path = cursor.getString(file_ColumnIndex);
String CapturedImageDetails = " Captured Image Details : \n\n"
+" ImageID :"+imageID+"\n"
+" ThumbID :"+thumbID+"\n"
+" Path :"+Path+"\n";
imageDetails.setText(CapturedImageDetails);
}
}
} finally {
if (cursor != null) {
cursor.close();
}
}
return ""+imageID;
}
public class LoadImagesFromSDCard extends AsyncTask<String, Void, Void> {
private ProgressDialog Dialog = new ProgressDialog(Camera.this);
Bitmap mBitmap;
protected void onPreExecute() {
Dialog.setMessage("Loading image from Sdcard..");
Dialog.show();
}
protected Void doInBackground(String... urls) {
Bitmap bitmap = null;
Bitmap newBitmap = null;
Uri uri = null;
try {
uri = Uri.withAppendedPath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, ""
+ urls[0]);
bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
if (bitmap != null) {
newBitmap = Bitmap.createScaledBitmap(bitmap, 170, 170, true);
bitmap.recycle();
if (newBitmap != null) {
mBitmap = newBitmap;
}
}
} catch (IOException e) {
cancel(true);
}
return null;
}
65
protected void onPostExecute(Void unused) {
Dialog.dismiss();
if(mBitmap != null) {
showImg.setImageBitmap(mBitmap);
}//NOT NULL
}}
void playSuara(String warna) {
int suara = R.raw.umum;
if (warna.equalsIgnoreCase("Merah")) {
suara = R.raw.merah;
} else if (warna.equalsIgnoreCase("Abu-Abu")) {
suara = R.raw.abuabu;
} else if (warna.equalsIgnoreCase("Biru")) {
suara = R.raw.biru;
} else if (warna.equalsIgnoreCase("Biru Dongker")) {
suara = R.raw.birudongker;
} else if (warna.equalsIgnoreCase("Biru Laut")) {
suara = R.raw.birulaut;
} else if (warna.equalsIgnoreCase("Coklat")) {
suara = R.raw.coklat;
} else if (warna.equalsIgnoreCase("Emas")) {
suara = R.raw.emas;
} else if (warna.equalsIgnoreCase("Hijau")) {
suara = R.raw.hijau;
} else if (warna.equalsIgnoreCase("Hitam")) {
suara = R.raw.hitam;
} else if (warna.equalsIgnoreCase("Kuning")) {
suara = R.raw.kuning;
} else if (warna.equalsIgnoreCase("Magenta")) {
suara = R.raw.magenta;
} else if (warna.equalsIgnoreCase("Merah Jambu")) {
suara = R.raw.merahjambu;
} else if (warna.equalsIgnoreCase("Merah Marun")) {
suara = R.raw.merahmarun;
} else if (warna.equalsIgnoreCase("Merah Mawar")) {
suara = R.raw.merahmawar;
} else if (warna.equalsIgnoreCase("Ungu")) {
suara = R.raw.ngu;
} else if (warna.equalsIgnoreCase("Nila")) {
suara = R.raw.nila;
} else if (warna.equalsIgnoreCase("Oranye")) {
suara = R.raw.oranye;
} else if (warna.equalsIgnoreCase("Perak")) {
suara = R.raw.perak;
} else if (warna.equalsIgnoreCase("Putih")) {
suara = R.raw.putih;
} else if (warna.equalsIgnoreCase("Violet")) {
suara = R.raw.violet;
} else if (warna.equalsIgnoreCase("Zaitun")) {
suara = R.raw.zaitun;
}
MediaPlayer mp = MediaPlayer.create(this, suara);
if (!mp.isPlaying()) {
mp.start();
66
mp.setLooping(true);
Toast.makeText(this, "Cek Warna " + warna, Toast.LENGTH_LONG).show();
}
}
String getValue(int R,int G,int B){
String warna="?="+R+":"+G+":"+B;
int down=20,up=20;
if ((R>=108 && R<=148) && (G>=108 && G<=148) && (B>=108 &&
B<=148)){warna="Abu-Abu";}
else if ((R>=0 && R<=20) && (G>=0 && G<=20) && (B>=225 && B<=255))
{warna="Biru";}
else if ((R>=0 && R<=20) && (G>=0 && G<=20) && (B>=108 && B<=148))
{warna="Biru Dongker";}
else if ((R>=0 && R<=20) && (G>=225 && G<=255) && (B>=225 && B<=255))
{warna="Biru Laut";}
else if ((R>=130 && R<=180) && (G>=55 && G<=105) && (B>=0 && B<=20))
{warna="Coklat";}
else if ((R>=225 && R<=255) && (G>=195 && G<=235) && (B>=0 && B<=20))
{warna="Emas";}
else if ((R>=0 && R<=20) && (G>=225 && G<=255) && (B>=0 && B<=20))
{warna="Hijau";}
else if ((R>=0 && R<=20) && (G>=0 && G<=20) && (B>=0 && B<=20))
{warna="Hitam";}
else if ((R>=225 && R<=255) && (G>=225 && G<=255) && (B>=0 && B<=20))
{warna="Kuning";}
else if ((R>=225 && R<=255) && (G>=0 && G<=20) && (B>=225 && B<=255))
{warna="Magenta";}
else if ((R>=225 && R<=255) && (G>=0 && G<=20) && (B>=107 && B<=147))
{warna="Merah Mawar";}
else if ((R>=225 && R<=255) && (G>=0 && G<=20) && (B>=0 && B<=20))
{warna="Merah";}
else if ((R>=108 && R<=148) && (G>=0 && G<=20) && (B>=0 && B<=20))
{warna="Merah Marun";}
else if ((R>=225 && R<=255) && (G>=172 && G<=212) && (B>=183 && B<=223))
{warna="Merah Jambu";}
else if ((R>=91 && R<=131) && (G>=0 && G<=20) && (B>=225 && B<=255))
{warna="Nila";}
else if ((R>=225 && R<=255) && (G>=107 && G<=147) && (B>=0 && B<=20))
{warna="Oranye";}
else if ((R>=172 && R<=212) && (G>=172 && G<=212) && (B>=172 && B<=212))
{warna="Perak";}
else if ((R>=225 && R<=255) && (G>=225 && G<=255) && (B>=225 && B<=255))
{warna="Putih";}
else if ((R>=171 && R<=211) && (G>=0 && G<=20) && (B>=225 && B<=255))
{warna="Ungu";}
else if ((R>=123 && R<=163) && (G>=0 && G<=20) && (B>=225 && B<=255))
{warna="Violet";}
else if ((R>=108 && R<=148) && (G>=108 && G<=148) && (B>=0 && B<=20))
{warna="Zaitun";}
else if ((R>=190 && R<=255) && (G>=0 && G<=50) && (B>=0 && B<=50))
{warna="Merah 200 49 42";}
return warna;
}
}
67
D. Deployment Diagram
Gambar III.17 Deployment Diagram