Halo Sobat Coding, pada tutorial kali ini kita akan membuat program yang bisa digunakan untuk memanipulasi gambar.
Berikut deskripsi program yang akan kita buat.
- Program berguna untuk memanipulasi atau mengubah tampilan dari gambar / foto digital.
- Pilihan jenis manipulasi yang bisa diterapkan adalah Grayscale, Biner, dan Inverse (Negative).
- Program akan menggunakan library yang bernama System.Drawing.Imaging.
Langkah-langkah mendesain tampilan program adalah sebagai berikut:
Buat project baru dengan nama manipulasiGambar Masukkan ke dalam Form1 komponen komponen yang dibutuhkan sebagai berikut. 2 buah Button , dan 1 buah ComboBox . Atur tata letaknya kira-kira seperti pada gambar di bawah ini.
Untuk langkah selanjutnya, kita akan mengubah semua nilai properties pada masing-masing objek yang ada pada Form1, termasuk nilai properties Form1 itu sendiri. Untuk mengetahui komponen dan properties yang mana yang akan diubah, dan apa nilainya, silahkan Anda lihat pada Tabel di bawah ini.
Setelah pendesainan selanjutnya kita akan melakukan coding. Langkah-langkahnya adalah sebagai berikut:
Klik satu kali pada Form1, lalu tekan tombol F7, ketikkan kode ini di bawah using System.Windows.Forms; seperti dibawah ini.
using System.Text; using System.Windows.Forms; using System.Drawing.Imaging;
Keterangan Program:
- Baris 3: memanggil namespace lain dengan menggunakan perintah using. Pada program ini namespace yang dipanggil adalah System.Drawing.Imaging.
Setelah itu, kembali lagi ke designer form. Klik satu kali Form1. Pada bagian Properties, klik simbol , Lalu klik dua kali pada event Paint.
Lalu, ketik kode berikut ini. Kode ini akan berjalan, ketika Form1 sedang ditampilkan (di-paint) ke layar monitor
private void Form1_Paint(object sender, PaintEventArgs e) { string PilManipulasi = comboPilManipulasi.Text; Graphics g = e.Graphics; Bitmap bmp = new Bitmap("duniadigital.jpg"); g.FillRectangle(Brushes.BlanchedAlmond, this.ClientRectangle); Byte warnaR, warnaG, warnaB; int x = 0; int xn = 0; if (PilManipulasi != "Jenis Manipulasi") { for (int i = 0; i < bmp.Width - 1; i++) { for (int j = 0; j < bmp.Height - 1; j++) { warnaR = bmp.GetPixel(i, j).R; warnaG = bmp.GetPixel(i, j).G; warnaB = bmp.GetPixel(i, j).B; x = (warnaR + warnaG + warnaB) / 3; if (PilManipulasi == "Grayscale") { xn = x; } else if (PilManipulasi == "Biner") { //BINER if (x < 128) xn = 0; else xn = 255; } else if (PilManipulasi == "Inverse (Negative)") { //INVERSE xn = 255 - x; } bmp.SetPixel(i, j, Color.FromArgb(xn, xn, xn)); } g.DrawImage(bmp, 20, 20, bmp.Width, bmp.Height); } } else { g.DrawImage(bmp, 20, 20, bmp.Width, bmp.Height); } g.Dispose(); }
Keterangan Program:
- Baris 3: mendeklarasikan variabel string dengan nama PilManipulasi, yang berguna untuk menyimpan jenis manipulasi yang dipilih oleh user melalui ComboBox comboPilManipulasi.
- Baris 4: membuat objek dengan nama g dari class Graphics, yang berguna sebagai kontrol untuk paint (menampilkan komponen ke layar).
- Baris 5: membuat objek dengan nama bmp dari class Bitmap, yang berguna sebagai penampung gambar yang akan dimanipulasi.
- Baris 6: menggambar objek segi empat (Rectangle) yang menutupi seluruh Form1. Setelah itu berikan warna pada Form1, yaitu warna BlanchedAlmond.
- Baris 7: mendeklarasikan tiga buah variabel bertipe Byte, dengan nama warnaR, warnaG, warnaB. Yang berguna untuk menampung tiga buah bilangan warna, yaitu Red, Green, Blue (RGB).
- Baris 8 & 9: mendeklarasikan variabel integer dengan nama x dan xn.
- Baris 10: periksa apakah variabel PilManipulasi tidak sama dengan “Jenis Manipulasi”. Jika benar, maka jalankan proses manipulasi sesuai dengan jenis yang dipilih. Jika salah, panggil (draw) kembali gambar seperti aslinya.
- Baris 12-15: melakukan perulangan mulai dari pixel pertama (dengan koordinat 0, 0) sampai dengan pixel ke sekian sesuai dengan lebar (width) dan tinggi (height) gambar.
- Baris 16-18: mengambil nilai R, G, dan B dari setiap pixel yang ditentukan oleh koordinat i, j. Lalu simpan ke variabel penampung masing-masing.
- Baris 19: mengambil nilai rata-rata dari warna RGB, lalu simpan hasilnya ke variabel x.
- Baris 20-21: jika manipulasi yang dipilih “Grayscale”, maka isi variable xn dengan isi dari variabel x.
- Baris 22-26: jika manipulasi yang dipilih “Biner”, maka isi variabel xn dengan angka 0 jika x bernilai kurang dari 128. Selain itu, isi variabel xn dengan angka 255.
- Baris 27-28: jika manipulasi yang dipilih “Inverse (Negative)”, maka isi variabel xn dengan hasil pengurangan 255 dengan isi variabel x.
- Baris 29: memasukkan kembali pixel yang sudah dimanipulasi nilai RGBnya. Dimana koordinat pixel ditentukan oleh i, j.
- Baris 31: menggambar kembali gambar/image dengan pixel-pixel yang sudah dimanipulasi. Dengan koordinat posisi pada Form1 adalah 20, 20.
- Baris 34: menggambar image yang asli, yaitu yang belum dimanipulasi.
- Baris 35: melepaskan semua resource (pada memory) yang digunakan selama proses manipulasi berlangsung.
Klik dua kali tombol cmdOke, lalu ketik kode berikut ini.
private void cmdOke_Click(object sender, EventArgs e) { ActiveForm.Refresh(); }
Keterangan Program:
- Baris 3: berguna untuk me-refresh form yang sedang aktif, dalam kasus ini adalah Form1. Hal ini berguna gambar hasil proses manipulasi bisa di gambar (paint) ulang.
Dan yang terakhir, kode yang berguna untuk menutup aplikasi yang kita buat ini.
private void cmdKeluar_Click(object sender, EventArgs e) { this.Close(); }
Coding sudah selesai, sekarang saatnya kita menjalankan program, tekan F5 maka akan tampil seperti gambar di bawah ini.
Gambar di atas merupakan gambar asli yang belum di manipulasi, sekarang kita akan memanipulasi gambar yang pertama adalah Grayscale pilih Grayscale pada ComboBox. Lalu tekan tombol Oke. Maka hasil manipulasinya akan tampak seperti Gambar di bawah ini
Berikutnya kita akan coba Biner, ganti pilihan pada ComboBox menjadi Biner. Lalu tekan tombol Oke. Maka hasil manipulasinya akan tampak seperti Gambar di bawah ini
Lalu yang terakhir kita akan menampilkan citra seperti negatif photo, pilih Inverse
(Negative). Lalu tekan tombol Oke. Maka hasil manipulasinya akan tampak seperti Gambar di bawah ini.
Tekan tombol Keluar, untuk menutup aplikasi.
Sekian Tutorial kali ini, Selamat Mencoba, Let’s Coding Together :D