ALGORITMA TRANSFORMASI RUANG WARNA
RGB, HexTriplet, HSL, HSV, HSI, HCL, YUV, YDbDr, YIQ, YCbCr
DENGAN BAHASA PEMROGRAMAN
VISUAL BASIC 6, VISUAL BASIC.NET, C#.NET, dan JAVA
HSL, HSV RGB HSI, HCL YUV, YDbDr Visual Basic 6, Visual HEXTriplet YIQ, YCbCr Basic.NET, C#.NET, JAVA
Ericks Rachmat Swedia Margi Cahyanti
i
KATA PENGANTAR
Ruang warna adalah sebuah model matematis yang menjelaskan tentang bagaimana cara warna direpresentasikan dalam angka. Monitor komputer menggunakan ruang warna yang disebut dengan RGB (Red Green Blue), sehingga data-data citra yang tersimpan dalam komputer adalah angka-angka (disebut juga dengan pixel) yang merepresentasikan warna Red, Green dan Blue.
Pemahaman tentang algoritma ruang warna sangat dibutuhkan untuk menganalisis citra, karena dengan menggunakan ruang-ruang warna inilah kita selanjutnya dapat mengklasifikasikan citra, mendeteksi objek dalam citra, mengkompresi ukuran citra dan lain sebagainya.
Buku ini akan memandu anda langkah per langkah dengan cepat dan mudah dalam memahami algoritma-algoritma ruang warna, terutama dalam melakukan transformasi antar ruang warna, dan implementasinya kedalam bahasa pemrograman Visual Basic 6, Visual Basic.Net, C# dan Java. Semua function dan method yang ada dalam buku ini telah di-run dan di-compile. Untuk Visual Basic menggunakan compiler Visual Basic dengan Service Pack 6. Untuk Visual Basic.Net dan C#.Net dapat digunakan compiler di versi 2005, 2008 dan versi terbaru 2010. Untuk Java menggunakan Netbeans versi 6.7.1. Project lengkap serta semua source code dalam buku ini juga tersedia didalam CD.
Buku ini dapat digunakan oleh para mahasiswa strata satu, strata dua bahkan strata tiga, dalam melakukan penelitian tugas akhir, juga para pengajar, peneliti dan praktisi, terutama yang bergelut dibidang pengolahan citra. Buku ini juga bisa dipakai sebagai bahan ajar dalam matakuliah-matakuliah yang membahas tentang citra.
Semoga buku ini dapat memberikan informasi yang bermanfaat bagi semua pembaca.
Depok, Juli 2010
Ericks Rachmat Swedia Margi Cahyanti
i
DAFTAR ISI
KATA PENGANTAR ………………………………………………………………………..… i
DAFTAR ISI …………………………………………………………………………………… ii
I. RUANG WARNA PADA CITRA ………………………………………………………. 1 I.1 RGB ………………………………………………………………………………. 1 I.2 HSL ……………………………………………………………………………….. 3 I.3 HSV ………………………………………………………………………………. 3 I.4 HSI ………………………………………………………………………………… 4 I.5 HCL ..………………………………………………………………………………. 5 I.6 YUV ……………………………………………………………………………….. 5 I.7 YDbDr ……………………………………………………………………………. 6 I.8 YIQ ………………………………………………………………………………… 6 I.9 YCbCr …………………………………………………………………………….. 7
II. ALGORITMA TRANSFORMASI WARNA ……………………………………………… 8 II.1 KONVERSI HEX TRIPLET KE RGB ……………………………………….. 8 II.1.A IMPLEMENTASI DENGAN VISUAL BASIC 6 ……………….. 9 II.1.B IMPLEMENTASI DENGAN VISUAL BASIC.NET …………… 10 II.1.C IMPLEMENTASI DENGAN C# ………………………………… 11 II.1.D IMPLEMENTASI DENGAN JAVA …………………………….. 12
II.2 KONVERSI RGB KE HEX TRIPLET ………………………………………… 13 II.2.A IMPLEMENTASI DENGAN VISUAL BASIC 6 ………….…… 13 II.2.B IMPLEMENTASI DENGAN VISUAL BASIC.NET …….…….. 15 II.2.C IMPLEMENTASI DENGAN C# ………………………….…….. 16 II.2.D IMPLEMENTASI DENGAN JAVA ……………………….…….. 17
II.3 TRANSFORMASI RGB KE HSL ……………………………………………. 17 II.3.A IMPLEMENTASI DENGAN VISUAL BASIC 6 ………….….. 20 II.3.B IMPLEMENTASI DENGAN VISUAL BASIC.NET …….……. 21 II.3.C IMPLEMENTASI DENGAN C# …………………………….….. 22 II.3.D IMPLEMENTASI DENGAN JAVA ……………………….……. 23
II.4 TRANSFORMASI HSL KE RGB …………………………………………….. 24 II.4.A IMPLEMENTASI DENGAN VISUAL BASIC 6 ………….….. 25 II.4.B IMPLEMENTASI DENGAN VISUAL BASIC.NET …….……. 26 II.4.C IMPLEMENTASI DENGAN C# ………………………….…….. 27 II.4.D IMPLEMENTASI DENGAN JAVA …………………….………. 28
ii
II.5 TRANSFORMASI RGB KE HSV …………………………………….……… 30 II.5.A IMPLEMENTASI DENGAN VISUAL BASIC 6 ……….……… 31 II.5.B IMPLEMENTASI DENGAN VISUAL BASIC.NET ……….…. 32 II.5.C IMPLEMENTASI DENGAN C# …………………….………….. 33 II.5.D IMPLEMENTASI DENGAN JAVA …………………….……….. 34
II.6 TRANSFORMASI HSV KE RGB …………………………………….………. 35 II.6.A IMPLEMENTASI DENGAN VISUAL BASIC 6 …….………… 36 II.6.B IMPLEMENTASI DENGAN VISUAL BASIC.NET …….…….. 37 II.6.C IMPLEMENTASI DENGAN C# ……………….………………… 38 II.6.D IMPLEMENTASI DENGAN JAVA ………….………………….. 39
II.7 TRANSFORMASI RGB KE HSI …………………………………….……….. 40 II.7.A IMPLEMENTASI DENGAN VISUAL BASIC 6 .………………. 41 II.7.B IMPLEMENTASI DENGAN VISUAL BASIC.NET .…………….. 42 II.7.C IMPLEMENTASI DENGAN C# …………………….…………… 43 II.7.D IMPLEMENTASI DENGAN JAVA …………………….……….. 44
II.8 TRANSFORMASI HSI KE RGB …………………………………….………. 45 II.8.A IMPLEMENTASI DENGAN VISUAL BASIC 6 …………….… 46 II.8.B IMPLEMENTASI DENGAN VISUAL BASIC.NET …….……. 47 II.8.C IMPLEMENTASI DENGAN C# ……………………….………… 48 II.8.D IMPLEMENTASI DENGAN JAVA ……………….…………….. 49
II.9 TRANSFORMASI RGB KE HCL ……………………………………………… 50 II.9.A IMPLEMENTASI DENGAN VISUAL BASIC 6 ….…………… 52 II.9.B IMPLEMENTASI DENGAN VISUAL BASIC.NET ….………. 53 II.9.C IMPLEMENTASI DENGAN C# ……………………….………… 54 II.9.D IMPLEMENTASI DENGAN JAVA ……………………….…….. 55
II.10 TRANSFORMASI HCL KE RGB .…………………………………………….. 55 II.10.A IMPLEMENTASI DENGAN VISUAL BASIC 6 ……………… 58 II.10.B IMPLEMENTASI DENGAN VISUAL BASIC.NET …………… 59 II.10.C IMPLEMENTASI DENGAN C# …………………………………. 60 II.10.D IMPLEMENTASI DENGAN JAVA ……………………………… 61
II.11 TRANSFORMASI RGB KE YUV DAN YUV KE RGB …………………… 63 II.11.A IMPLEMENTASI DENGAN VISUAL BASIC 6 …..………….. 64 II.11.B IMPLEMENTASI DENGAN VISUAL BASIC.NET …………… 64 II.11.C IMPLEMENTASI DENGAN C# …………………………………. 65 II.11.D IMPLEMENTASI DENGAN JAVA ……………………………… 66
II.12 TRANSFORMASI RGB KE YDbDr DAN YDbDr KE RGB ………….. 67 II.12.A IMPLEMENTASI DENGAN VISUAL BASIC 6 ……………… 68 II.12.B IMPLEMENTASI DENGAN VISUAL BASIC.NET …………… 69 II.12.C IMPLEMENTASI DENGAN C# …………………………………. 70 II.12.D IMPLEMENTASI DENGAN JAVA ……………………………… 71
iii
II.13 TRANSFORMASI RGB KE YIQ DAN YIQ KE RGB …………..……….. 72 II.13.A IMPLEMENTASI DENGAN VISUAL BASIC 6 …….………… 72 II.13.B IMPLEMENTASI DENGAN VISUAL BASIC.NET …………… 73 II.13.C IMPLEMENTASI DENGAN C# …………………………………. 74 II.13.D IMPLEMENTASI DENGAN JAVA ……………………………… 75
II.14 TRANSFORMASI RGB KE YCbCr DAN YCbCr KE RGB …………..… 76 II.14.A IMPLEMENTASI DENGAN VISUAL BASIC 6 ……….……… 77 II.14.B IMPLEMENTASI DENGAN VISUAL BASIC.NET …………… 77 II.14.C IMPLEMENTASI DENGAN C# …………………………………. 78 II.14.D IMPLEMENTASI DENGAN JAVA ……………………………… 79
DAFTAR PUSTAKA ………………………………………………………………………… 81
LAMPIRAN A – MEMBACA RGB DARI CITRA ……………………………………….. 82
LAMPIRAN B – TAMPILAN PROJECT TRANSFORMASI RUANG WARNA ………. 85
iv
I. RUANG WARNA PADA CITRA
Warna pada dasarnya merupakan hasil persepsi dari cahaya dalam spektrum wilayah yang terlihat oleh retina mata, dan memiliki panjang gelombang antara 400nm sampai dengan 700nm (Poynton , 1997).
Ruang warna atau yang sering juga disebut sebagai model warna merupakan sebuah cara atau metode untuk mengatur, membuat dan memvisualisasikan warna (Ford and Roberts, 1998). Untuk aplikasi yang berbeda ruang warna yang dipakai bisa juga berbeda, hal ini dikarenakan beberapa peralatan tertentu memang membatasi secara ketat ukuran dan jenis ruang warna yang dapat digunakan. Ruang warna biasa digunakan untuk menganalisis citra. Beberapa ruang warna tersebut antara lain adalah sebagai berikut : • RGB(Red Green Blue) • HSL (Hue Saturation Lightness), HSV (Hue Saturation Value), HSI (Hue Saturation Intensity), dan HCL (Hue Chroma Lightness) • YUV, YDbDr, YIQ dan YCbCr (Luminance – Chrominance)
I.1 RGB (Red Green Blue)
RGB sering digunakan didalam sebagian besar aplikasi komputer karena dengan ruang warna ini, tidak diperlukan transformasi untuk menampilkan informasi di layar monitor. Alasan diatas juga menyebabkan RGB banyak dimanfaatkan sebagai ruang warna dasar bagi sebagian besar aplikasi.
Model warna RGB adalah model warna berdasarkan konsep penambahan kuat cahaya primer yaitu Red, Green dan Blue. Dalam suatu ruang yang sama sekali tidak ada cahaya, maka ruangan tersebut adalah gelap total. Tidak ada signal gelombang cahaya yang diserap oleh mata kita atau RGB (0,0,0). Apabila ditambahkan cahaya merah pada ruangan tersebut, maka ruangan akan berubah warna menjadi merah misalnya RGB (255,0,0), semua benda dalam ruangan tersebut hanya dapat terlihat berwarna merah. Demikian juga apabila cahaya diganti dengan hijau atau biru.
Warna RGB (Sumber http://en.wikipedia.org/wiki/RGB_color_model)
1
Apabila diberikan 2 macam cahaya primer dalam ruangan tersebut seperti (merah dan hijau), atau (merah dan biru) atau (hijau dan biru), maka ruangan akan berubah warna masing-masing menjadi kuning, atau magenta atau cyan. Warna-warna yang dibentuk oleh kombinasi dua macam cahaya tersebut disebut warna sekunder. Warna Tersier adalah warna yang hanya dapat terlihat apabila ada tiga cahaya primer, jadi apabila dinon-aktifkan salah satu cahaya, maka benda tersebut berubah warna. Contoh warna tersier seperti abu-abu,putih.
Pada perhitungan dalam program-program komputer model warna direpresentasi dengan nilai komponennya, seperti dalam RGB (r, g, b) masing-masing nilai antara 0 hingga 255 sesuai dengan urusan masing-masing yaitu pertama Red, kedua Green dan ketigha adalah nilai Blue dengan demikian masing-masing komponen ada 256 tingkat. Apabila dikombinasikan maka ada 256 x 256 x 256 atau 16.777.216 kombinasi warna RGB yang dapat dibentuk.
kuning hijau cyan (255,255,0) (0,255,0) (0,255,255)
• (0, 0, 0) : hitam • (255, 255, 255) : putih • (255, 0, 0) : merah • (0, 255, 0) : hijau merah biru • (0, 0, 255) : biru (255,0,0) (0,0,255) • (255, 255, 0) : kuning • (0, 255, 255) : cyan • (255, 0, 255) : magenta
merah magenta (255,0,0) (255,0,255)
Konfigurasi Warna RGB (Sumber http://en.wikipedia.org/wiki/RGB_color_model)
Dalam mendesign web warna RGB kerapkali direpresentasikan dengan Hex Triplet atau kombinasi 2 pasang bilangan hexadecimal, seperti #FF5D25 artinya Red = FF atau 15*16 + 15 = 255, Green = 5D atau 5*16 + 13 = 93 dan Blue = 25 atau 2*16 + 5 = 37. Jadi RGB (255,93,37)
2
I.2 HSL
Mode HSL merupakan mode yang ditemukan oleh Alvy Ray Smith pada tahun 1978. Mode ini merepresentasikan warna dalam tiga komponen: hue, saturation, dan lightness. Secara konseptual HSL berbentuk kerucut berganda atau lingkaran dengan pucuknya berwarna putih, sudut dasarnya berwarna hitam, dan warna-warni sangat pekat pada sekeliling sisi lingkar horizontal serta pada bagian tengah warna abu-abu sedang .
Ruang Warna HSL (Sumber : http://en.wikipedia.org/wiki/HSL_and_HSV)
Pengertian Hue merupakan karakteristik warna berdasar cahaya yang dipantulkan oleh objek, dalam warna dilihat dari ukurannya mengikuti tingkatan 0 sampai 359. Sebagai contoh, pada tingkat 0 adalah warna Merah, 60 adalah warna Kuning, untuk warna Hijau pada tingkatan 120, sedangkan pada 180 adalah warna Cyan. Untuk tingkat 240 merupakan warna Biru, serta 300 adalah warna Magenta.
Saturation/Chroma adalah tingkatan warna berdasarkan ketajamannya berfungsi untuk mendefinisikan warna suatu objek cenderung murni atau cenderung kotor (gray). Saturation mengikuti persentase yang berkisar dari 0% sampai 100% sebagai warna paling tajam.
Lightness adalah tingkatan warna berdasarkan pencampuran dengan unsur warna Putih sebagai unsur warna yang memunculkan kesan warna terang atau gelap. Nilai koreksi warna pada Lightness berkisar antara 0 untuk warna paling gelap dan 100 untuk warna paling terang.
I.3 HSV
Model warna HSV mendefinisikan warna dalam terminologi Hue, Saturation dan Value. Hue menyatakan warna sebenarnya, seperti merah, violet, dan kuning. Hue digunakan untuk membedakan warna-warna dan menentukan kemerahan (redness), kehijauan (greeness), dsb, dari cahaya. Hue berasosiasi dengan panjang gelombang cahaya. Saturation menyatakan tingkat kemurnian suatu warna, yaitu mengindikasikan seberapa banyak warna putih diberikan pada warna. Value adalah
3 atribut yang menyatakan banyaknya cahaya yang diterima oleh mata tanpa memperdulikan warna
Ruang Warna HSV (Sumber : http://en.wikipedia.org/wiki/HSL_and_HSV)
I.4 HSI
Model warna HSI mendefinisikan warna dalam terminologi Hue, Saturation dan Intensity. Hue menyatakan warna sebenarnya, seperti merah, violet, dan kuning. Hue digunakan untuk membedakan warna-warna dan menentukan kemerahan (redness), kehijauan (greeness), dsb, dari cahaya. Hue berasosiasi dengan panjang gelombang cahaya. Saturation menyatakan tingkat kemurnian suatu warna, yaitu mengindikasikan seberapa banyak warna putih diberikan pada warna. Intensity adalah atribut yang menyatakan banyaknya cahaya yang diterima oleh mata tanpa memperdulikan warna.
Ruang Warna HSI (Sumber : http://en.wikipedia.org/wiki/HSL_and_HSV)
4
I.5 HCL
Ruang warna HCL(Hue, Chroma, Luminance) telah dikembangkan dengan mempertahankan kelebihan yang ada pada ruang warna HSL dan HSV serta menutupi kekurangan yang ada pada keduanya.
Dengan demikian ruang warna ini menjadi lebih optimal untuk kebutuhan analisis informasi warna dalam citra. Madenda dan Missaoui dalam papernya [2005] telah membuktikan bahwa, ruang warna HCL memiliki keunggulan yang cukup signifikan dibandingkan dengan ruang warna lainnya.
Kelebihan dari ruang warna ini diantaranya adalah componen H (warna) memiliki nilai yang konstan sekalipun terjadi perubahan intensitas cahaya maupun chroma pada objek.
(a) (b)
Gambar. 2. a) Model ruang warna HCL. b) Representasi variasi chroma C dan luminance L untuk 6 warna. [Madenda dan Missaoui, 2005]
I.5 YUV (PAL)
YUV adalah ruang warna yang biasanya digunakan sebagai bagian dari kompresi image. YUV mengurangi komponen chrominance sehingga memperkecil bandwidth data image namun tidak terlalu berpengaruh dalam penglihatan manusia.
Dalam YUV komponen krominansi (U dan V) dengan jelas terpisah dari komponen luminansinya (Y) sehingga memudahkan dalam mensegmentasi image. ruang warna ini biasanya digunakan dalam kebanyakan standar coding citra dan video.
5
Ruang Warna YUV (Sumber : http://en.wikipedia.org/wiki/YUV)
I.6 YDbDr
YdbDr adalah alternatif lain dari YUV, ruang warna ini digunakan di Perancis dan beberapa negara timur lainnya.
YdbDr terdiri dari komponen - Y, Db and Dr. Y adalah luminance, dan Db, Dr adalah chrominance (perbedaan antara warna merah dan biru).
I.7 YIQ
YIQ adalah ruang warna yang digunakan oleh TV berwarna NTSC, digunakan sebagian besar di Amerika Utara dan Tengah dan Jepang. Komponen Y menunjukkan luma, dan komponen ini adalah satu-satunya komponen yang digunakan oleh penerima televisi hitam-putih. I berarti in-phase, Q berarti quadrature, mengacu kepada komponen quadrature amplitudo.
Ruang warna YIQ dimaksudkan untuk mengambil kelebihan dari karakteristik response penglihatan manusia. Mata manusia lebih sensitif ke perubahan kuning- biru (I) daripada ke ungu-hijau (Q).
Ruang Warna YIQ(Sumber : http://en.wikipedia.org/wiki/YIQ)
6
I.8 YCbCr
YCbCr merupakan standar internasional bagi pengkodean digital gambar televisi yang didefinisikan di CCIR Recommendation 601 (Ford dan Roberts, 1998).
Y merupakan komponen luminance, Cb dan Cr adalah komponen chrominance. Pada monitor monokrom nilai luminance digunakan untuk merepresentasikan warna RGB, secara psikologis ia mewakili intensitas sebuah warna RGB yang diterima oleh mata. Chrominance merepresentasikan corak warna dan saturasi (saturation). Nilai komponen ini juga mengindikasikan banyaknya komponen warna biru dan merah pada warna (Cuturicu, 1999).
Retina mata mempunyai dua macam sel yang berfungsi sebagai analis visual, yaitu : Sel yang digunakan untuk penglihatan di waktu malam dan sel yang dipakai untuk penglihatan di siang hari. Jenis yang pertama hanya menerima corak keabuan mulai dari warna putih terang sampai dengan hitam pekat. Dan jenis kedua menerima corak warna. Jika sebuah warna RGB diberikan, sel jenis yang pertama mendeteksi tingkat keabuan (gray level) yang serupa dengan nilai luminance-nya, sedangkan sel jenis kedua yang bertanggungjawab terhadap penerimaan corak warna, mendeteksi nilai yang sesuai dengan nilai chrominancenya (Cuturicu, 1999).
7
II. ALGORITMA TRANSFORMASI WARNA
II.1 KONVERSI HEX TRIPLET KE RGB
Dalam mendesign web, warna RGB kerapkali direpresentasikan dengan Hex Triplet atau kombinasi 2 pasang bilangan hexadecimal. Hex Triplet pada dasarnya adalah bilangan Hexadesimal, untuk mengkonversi RGB ke Hex Triplet dibutuhkan konversi tabel bilangan Hexadesimal ke bilangan desimal seperti tabel dibawah.
HEXADESIMAL DESIMAL HEXADESIMAL DESIMAL 0 0 8 8 1 1 9 9 2 2 A 10 3 3 B 11 4 4 C 12 5 5 D 13 6 6 E 14 7 7 F 15
Jadi bila terdapat Hex Triplet #411BEA, bilangan ini dipecah menjadi 41 untuk Red dan 1B untuk Green dan EA untuk Blue, sehingga :
• Bilangan 41, untuk karakter yang pertama adalah 4 hexadesimal dan menurut tabel diatas 4 hexadesimal adalah 4 desimal, maka 4 x 16 =64, sedangkan untuk karakter yang kedua yaitu 1 dan menurut tabel diatas 1 hexadesimal adalah 1 desimal, maka 64 + 1 = 65, jadi konversi 41 ke RGB (Red) adalah 65.
• Bilangan 1B, untuk karakter yang pertama adalah 1 hexadesimal dan menurut tabel diatas 1 hexadesimal adalah 1 desimal, maka 1 x 16 =16, sedangkan untuk karakter yang kedua yaitu B dan menurut tabel diatas B hexadesimal adalah 11 desimal, maka 16 + 11 = 27 jadi konversi 1B ke RGB (Green) adalah 27.
• Bilangan EA, untuk karakter yang pertama adalah E hexadesimal dan menurut tabel diatas E hexadesimal adalah 14 desimal, maka 14 x 16 = 224, sedangkan untuk karakter yang kedua yaitu A dan menurut tabel diatas A hexadesimal adalah 10 desimal, maka 224 + 10 = 234, jadi konversi EA ke RGB (Blue) adalah 234.
Jadi konversi dari Hex Triplet #411BEA ke RGB adalah 65, 27, 234.
8
Berdasarkan langkah-langkah konversi diatas, maka untuk mengimplementasikan ke bahasa pemrograman adalah sebagai berikut :
II.1.A VISUAL BASIC 6
0 Private Function Konversi_HexTriplet_RGB(HEXTRIPLET As String) As String 1 Dim strData As String 2 Dim strRet As String 3 4 strData = Replace(HEXTRIPLET, "#", "") 5 strData = UCase$(strData) 6 If Len(strData) >= 6 Then 7 Dim strRed As String, strGreen As String, strBlue As String 8 9 strRed = CStr(Hex_Des(Mid$(strData, 1, 1)) * 16 + _ 10 Hex_Des(Mid$(strData, 2, 1))) 11 12 strGreen = CStr(Hex_Des(Mid$(strData, 3, 1)) * 16 + _ 13 Hex_Des(Mid$(strData, 4, 1))) 14 15 strBlue = CStr(Hex_Des(Mid$(strData, 5, 1)) * 16 + _ 16 Hex_Des(Mid$(strData, 6, 1))) 17 18 strRet = strRed + "," + strGreen + "," + strBlue 19 End If 20 21 Konversi_HexTriplet_RGB = strRet 22 End Function
Untuk mengkonversi Hexadesimal ke desimal dibutuhkan function berikut :
0 Private Function Hex_Des(HEXA As String) As Integer 1 Dim iRet As Integer 2 Select Case HEXA 3 Case "A" 4 iRet = 10 5 Case "B" 6 iRet = 11 7 Case "C" 8 iRet = 12 9 Case "D" 10 iRet = 13 11 Case "E" 12 iRet = 14 13 Case "F" 14 iRet = 15 15 Case Else 16 If IsNumeric(HEXA) Then iRet = CInt(HEXA) 17 End Select 18 19 Hex_Des = iRet 20 End Function
9
II.1.B VISUAL BASIC.NET
0 Private Function Konversi_HexTriplet_RGB(ByVal HEXTRIPLET As String) As String 1 Dim strData As String 2 Dim strRet As String 3 4 strRet = "" 5 strData = HEXTRIPLET.Replace("#", "").ToUpper() 6 If strData.Length >= 6 Then 7 Dim strRed As String, strGreen As String, strBlue As String 8 9 strRed = CStr(Hex_Des(strData.Substring(0, 1)) * 16 + _ 10 Hex_Des(strData.Substring(1, 1))) 11 12 strGreen = CStr(Hex_Des(strData.Substring(2, 1)) * 16 + _ 13 Hex_Des(strData.Substring(3, 1))) 14 15 strBlue = CStr(Hex_Des(strData.Substring(4, 1)) * 16 + _ 16 Hex_Des(strData.Substring(5, 1))) 17 18 strRet = strRed + "," + strGreen + "," + strBlue 19 End If 20 21 Return strRet 22 End Function
Untuk mengkonversi Hexadesimal ke desimal dibutuhkan function berikut :
0 Private Function Hex_Des(ByVal HEXA As String) As Integer 1 Dim iRet As Integer 2 3 iRet = 0 4 Select Case HEXA 5 Case "A" 6 iRet = 10 7 Case "B" 8 iRet = 11 9 Case "C" 10 iRet = 12 11 Case "D" 12 iRet = 13 13 Case "E" 14 iRet = 14 15 Case "F" 16 iRet = 15 17 Case Else 18 If IsNumeric(HEXA) Then iRet = CInt(HEXA) 19 End Select 20 21 Return iRet 22 End Function
10
II.1.C C#
0 private string Konversi_HexTriplet_RGB(string HEXTRIPLET) 1 { 2 string strData; 3 string strRet; 4 5 strData=HEXTRIPLET.Replace("#","").ToUpper(); 6 strRet = ""; 7 8 if (strData.Length >= 6) 9 { 10 string strRed, strGreen, strBlue; 11 12 strRed = Convert.ToString(Hex_Des(strData.Substring(0, 1)) * 16 + 13 Hex_Des(strData.Substring(1, 1))); 14 strGreen = Convert.ToString(Hex_Des(strData.Substring(2, 1)) * 16 + 15 Hex_Des(strData.Substring(3, 1))); 16 strBlue = Convert.ToString(Hex_Des(strData.Substring(4, 1)) * 16 + 17 Hex_Des(strData.Substring(5, 1))); 18 19 strRet = strRed + "," + strGreen + "," + strBlue; 20 } 21 return strRet; 22 }
Method konversi dari Hexadesimal ke desimal dalam C# :
0 private int Hex_Des(string HEXA) 1 { 2 int iRet = 0; 3 4 if (HEXA == "A") 5 iRet = 10; 6 else if (HEXA == "B") 7 iRet = 11; 8 else if (HEXA == "C") 9 iRet = 12; 10 else if (HEXA == "D") 11 iRet = 13; 12 else if (HEXA == "E") 13 iRet = 14; 14 else if (HEXA == "F") 15 iRet = 15; 16 else 17 { 18 try { 19 iRet = Convert.ToInt32(HEXA); 20 } 21 catch (Exception) { } 22 } 23 24 return iRet; 25 }
11
II.1.D JAVA
0 private String Konversi_HexTriplet_RGB(String HEXTRIPLET) 1 { 2 String strData; 3 String strRet; 5 strData=HEXTRIPLET; 6 strRet = ""; 8 if (strData.length() >= 6) 9 { 10 int strRed, strGreen, strBlue; 11 12 strRed = Hex_Des(strData.substring(0, 1)) * 16 + 13 Hex_Des(strData.substring(1, 2)); 14 strGreen = Hex_Des(strData.substring(2, 3)) * 16 + 15 Hex_Des(strData.substring(3, 4)); 16 strBlue = Hex_Des(strData.substring(4, 5)) * 16 + 17 Hex_Des(strData.substring(5)); 18 19 strRet = String.valueOf(strRed) + "," + String.valueOf(strGreen) + 20 "," + String.valueOf(strBlue); 21 } 22 return strRet; 23 }
Method konversi dari Hexadesimal ke desimal dalam Java :
0 private int Hex_Des(String HEXA) 1 { 2 int iRet = 0; 3 4 if (HEXA.equals("A")) 5 iRet = 10; 6 else if (HEXA.equals("B")) 7 iRet = 11; 8 else if (HEXA.equals("C")) 9 iRet = 12; 10 else if (HEXA.equals("D")) 11 iRet = 13; 12 else if (HEXA.equals("E")) 13 iRet = 14; 14 else if (HEXA.equals("F")) 15 iRet = 15; 16 else 17 { 18 try 19 { 20 iRet = Integer.parseInt(HEXA); 21 } 22 catch(Exception ex) {} 23 } 24 25 return iRet; 26 }
12
Function/Method Konversi_HexTriplet_RGB (dalam bahasa pemrograman VB, VB.NET, C# dan Java) diatas menerima parameter data HexTriplet berupa string, contoh parameter yang dikirimkan adalah 411BEA, dan function ini akan mengembalikan nilai RGB yang bertipe string dan dipisahkan dengan koma, contoh output adalah 65,27,234.
II.2 RGB KE HEX TRIPLET
Untuk menkonversi RGB ke Hex Triplet, misal RGB(65, 27, 234) maka langkahnya adalah :
• 65 / 16 = 4.06, bilangan 4 dikonversikan menurut tabel konversi hexadesimal diatas adalah 4, dan sisa pembagiannya adalah 1 dikonversikan menurut tabel konversi hexadesimal adalah 1 maka Hex Triplet untuk RGB (Red) 65 adalah 41.
• 27 / 16 = 1.68, bilangan 1 dikonversikan menurut tabel konversi hexadesimal diatas adalah 1, dan sisa pembagiannya adalah 11 dikonversikan menurut tabel konversi hexadesimal adalah B maka Hex Triplet untuk RGB (Green) 27 adalah 1B.
• 234 / 16 = 14.625, bilangan 14 dikonversikan menurut tabel konversi hexadesimal diatas adalah E, dan sisa pembagiannya adalah 10 dikonversikan menurut tabel konversi hexadesimal adalah A maka Hex Triplet untuk RGB (Blue) 234 adalah EA.
Jadi konversi dari RGB(65, 27, 234) ke Hex Triplet adalah 411BEA.
Berdasarkan langkah-langkah konversi diatas, maka untuk mengimplementasikan ke bahasa pemrograman adalah sebagai berikut :
II.2.A VISUAL BASIC 6
0 Private Function Konversi_RGB_HexTriplet(RGB As String) As String 1 Dim strData() As String 2 Dim strRet As String 3 4 strRet = "" 5 strData = Split(RGB, ",") 6 If UBound(strData) >= 2 Then 7 Dim strRed As String, strGreen As String, strBlue As String 8 Dim iRed1 As Single 9 Dim iRed2 As Single 10 11 iRed1 = Fix(CSng(strData(0)) / 16) 12 iRed2 = Fix(CSng(strData(0)) Mod 16)
13
13 strRed = Des_Hex(CStr(iRed1)) + _ 14 Des_Hex(CStr(iRed2)) 15 Dim iGreen1 As Single 16 Dim iGreen2 As Single 17 18 iGreen1 = Fix(CSng(strData(1)) / 16) 19 iGreen2 = Fix(CSng(strData(1)) Mod 16) 20 strGreen = Des_Hex(CStr(iGreen1)) + _ 21 Des_Hex(CStr(iGreen2)) 22 23 Dim iBlue1 As Single 24 Dim iBlue2 As Single 25 26 iBlue1 = Fix(CSng(strData(2)) / 16) 27 iBlue2 = Fix(CSng(strData(2)) Mod 16) 28 strBlue = Des_Hex(CStr(iBlue1)) + _ 29 Des_Hex(CStr(iBlue2)) 30 31 strRet = strRed + strGreen + strBlue 32 End If 33 34 Konversi_RGB_HexTriplet = strRet 35 End Function
Function konversi dari Hexadesimal ke desimal dalam VB :
0 Private Function Des_Hex(DESIMAL As Single) As String 1 Dim strRet As String 2 3 strRet = DESIMAL 4 Select Case DESIMAL 5 Case 10 6 strRet = "A" 7 Case 11 8 strRet = "B" 9 Case 12 10 strRet = "C" 11 Case 13 12 strRet = "D" 13 Case 14 14 strRet = "E" 15 Case 15 16 strRet = "F" 17 End Select 18 19 Des_Hex = strRet 20 End Function
14
II.2.B VISUAL BASIC.NET
0 Private Function Konversi_RGB_HexTriplet(ByVal RGB As String) As String 1 Dim strData() As String 2 Dim strRet As String 3 4 strRet = "" 5 strData = RGB.Split(",") 6 If strData.Length >= 3 Then 7 Dim strRed As String, strGreen As String, strBlue As String 8 9 Dim iRed1 As Single 10 Dim iRed2 As Single 11 12 iRed1 = Fix(CSng(strData(0)) / 16) 13 iRed2 = Fix(CSng(strData(0)) Mod 16) 14 strRed = Des_Hex(iRed1) + Des_Hex(iRed2) 15 16 Dim iGreen1 As Single 17 Dim iGreen2 As Single 18 19 iGreen1 = Fix(CSng(strData(1)) / 16) 20 iGreen2 = Fix(CSng(strData(1)) Mod 16) 21 strGreen = Des_Hex(iGreen1) + Des_Hex(iGreen2) 22 23 Dim iBlue1 As Single 24 Dim iBlue2 As Single 25 26 iBlue1 = Fix(CSng(strData(2)) / 16) 27 iBlue2 = Fix(CSng(strData(2)) Mod 16) 28 strBlue = Des_Hex(iBlue1) + Des_Hex(iBlue2) 29 30 strRet = strRed + strGreen + strBlue 31 End If 32 Return strRet 33 End Function
Function konversi dari Hexadesimal ke desimal dalam VB.NET :
0 Private Function Des_Hex(ByVal DESIMAL As Single) As String 1 Dim strRet As String 2 3 strRet = DESIMAL 4 Select Case DESIMAL 5 Case 10 6 strRet = "A" 7 Case 11 8 strRet = "B" 9 Case 12 10 strRet = "C" 11 Case 13 12 strRet = "D" 13 Case 14 14 strRet = "E"
15
15 Case 15 16 strRet = "F" 17 End Select 18 Return strRet 19 End Function
II.2.C C#
0 private string Konversi_RGB_HexTriplet(string RGB) 1 { 2 string[] strData; 3 string strRet; 4 5 strData = RGB.Split(','); 6 strRet = ""; 7 8 if (strData.Length >= 3) 9 { 10 string strRed, strGreen, strBlue; 11 double iRed1, iRed2; 12 iRed1 = Math.Truncate(Convert.ToDouble(strData[0]) / 16); 13 iRed2 = Math.Truncate(Convert.ToDouble(strData[0]) % 16); 14 strRed = Des_Hex(iRed1) + Des_Hex(iRed2); 15 16 double iGreen1, iGreen2; 17 iGreen1 = Math.Truncate(Convert.ToDouble(strData[1]) / 16); 18 iGreen2 = Math.Truncate(Convert.ToDouble(strData[1]) % 16); 19 strGreen = Des_Hex(iGreen1) + Des_Hex(iGreen2); 20 21 double iBlue1, iBlue2; 22 iBlue1 = Math.Truncate(Convert.ToDouble(strData[2]) / 16); 23 iBlue2 = Math.Truncate(Convert.ToDouble(strData[2]) % 16); 24 strBlue = Des_Hex(iBlue1) + Des_Hex(iBlue2); 25 26 strRet = strRed + strGreen + strBlue; 27 } 28 return strRet; 29 }
Method konversi dari Hexadesimal ke desimal dalam C# :
0 private string Des_Hex(double DESIMAL) 1 { 2 string strRet = DESIMAL.ToString(); 3 4 if (DESIMAL == 10) 5 strRet = "A"; 6 else if (DESIMAL == 11) 7 strRet = "B"; 8 else if (DESIMAL == 12) 9 strRet = "C"; 10 else if (DESIMAL == 13)
16
11 strRet = "D"; 12 else if (DESIMAL == 14) 13 strRet = "E"; 14 else if (DESIMAL == 15) 15 strRet = "F"; 16 17 return strRet; 18 }
II.2.D JAVA
0 private String Konversi_RGB_HexTriplet(String RGB) 1 { 2 String[] strData; 3 String strRet; 4 5 strData = RGB.split(","); 6 strRet = ""; 7 8 if (strData.length >= 2) 9 { 10 String strRed, strGreen, strBlue; 11 double iRed1, iRed2; 12 iRed1 = Double.parseDouble(strData[0]) / 16; 13 iRed2 = Double.parseDouble(strData[0]) % 16; 14 strRed = Des_Hex((int)iRed1) + Des_Hex((int)iRed2); 15 16 double iGreen1, iGreen2; 17 iGreen1 = Double.parseDouble(strData[1]) / 16; 18 iGreen2 = Double.parseDouble(strData[1]) % 16; 19 strGreen = Des_Hex((int)iGreen1) + Des_Hex((int)iGreen2); 20 21 double iBlue1, iBlue2; 22 iBlue1 = Double.parseDouble(strData[2]) / 16; 23 iBlue2 = Double.parseDouble(strData[2]) % 16; 24 strBlue = Des_Hex((int)iBlue1) + Des_Hex((int)iBlue2); 25 26 strRet = strRed + strGreen + strBlue; 27 } 28 return strRet; 29 }
Method konversi dari Hexadesimal ke desimal dalam Java :
0 private String Des_Hex(int DESIMAL) 1 { 2 String strRet = Integer.toString(DESIMAL); 3 4 if (DESIMAL == 10) 5 strRet = "A"; 6 else if (DESIMAL == 11) 7 strRet = "B";
17
8 else if (DESIMAL == 12) 9 strRet = "C"; 10 else if (DESIMAL == 13) 11 strRet = "D"; 12 else if (DESIMAL == 14) 13 strRet = "E"; 14 else if (DESIMAL == 15) 15 strRet = "F"; 16 17 return strRet; 18 }
RGB terdiri dari bilangan Red, Green dan Blue, untuk memasukkan bilangan RGB ke function/method Konversi_RGB_HexTriplet diatas, data dipisahkan oleh tanda koma (,), jadi contoh pengiriman parameter ke function/method Konversi_RGB_HexTriplet diatas adalah 65,27,234. Output dari function ini akan berupa data HexTriplet bertipe string, contoh : 411BEA.
II.3 TRANSFORMASI RGB KE HSL
Untuk mentransformasi nilai dari RGB ke HSL diasumsikan koordinat-koordinat R, G, B [0,1] adalah berurutan merah, hijau, biru dalam ruang warna RGB. Nilai max adalah nilai maksimum dari nilai red, green, blue, dan min adalah nilai minimum dari nilai red, green, blue. Untuk memperoleh sudut hue[0,3600] yang tepat untuk ruang warna HSL menggunakan rumus seperti berikut (http://en.wikipedia.org/wiki/HSL_and_HSV) :