Pengolahan Citra adalah proses untuk melakukan transformasi atau manipulasi dari suatu citra atau gambar menjadi citra lain dengan menggunakan teknik tertentu. Contoh yang dibahas kali ini adalah mengenai teknik-teknik dalam melakukan pengolahan citra secara sederhana.
Pengolahan Citra dapat diterapkan dalam berbagai bidang. Salah satu cabang dari pengolahan citra adalah teknik pengenalan karakter atau disebut juga dengan OCR (Optical Character Recognition) yang sudah pernah dibahas sebelumnya.
Ada beberapa fitur pengolahan citra sederhana yang dibahas yaitu:
Mode Menggambar
Fitur ini digunakan untuk menggambar langsung ke dalam gambar yang sudah tersedia
Inputan yang diperlukan adalah warna dan ukuran tebal pena. Semakin tebal pena yang digunakan, maka hasil gambar akan semakin tebal, dan sebaliknya.
Gunakan fungsi ini untuk melakukan fitur tersebut
Private Sub PictureBox1_MouseDown(sender As Object, e As MouseEventArgs) Handles PictureBox1.MouseDown If isMenggambar Then posisiSebelumnya = New Point(CInt(e.Location.X / faktorPembesar), CInt(e.Location.Y / faktorPembesar)) isMulaiMenggambar = True End If End Sub Private Sub PictureBox1_MouseMove(sender As Object, e As MouseEventArgs) Handles PictureBox1.MouseMove If isMulaiMenggambar Then Dim bmap As New Bitmap(PictureBox1.Image) Dim gr As Graphics = Graphics.FromImage(bmap) Dim p As New Pen(warna, ukuran) gr.DrawLine(p, posisiSebelumnya.X, posisiSebelumnya.Y, CInt(e.Location.X / faktorPembesar), CInt(e.Location.Y / faktorPembesar)) posisiSebelumnya = New Point(CInt(e.Location.X / faktorPembesar), CInt(e.Location.Y / faktorPembesar)) p.Dispose() PictureBox1.Image = bmap End If End Sub Private Sub PictureBox1_MouseUp(sender As Object, e As MouseEventArgs) Handles PictureBox1.MouseUp isMulaiMenggambar = False End Sub
Hasil perbandingan sebelum dan sesudah dilakukan fitur menggambar adalah sebagai berikut (klik untuk perbesar gambar):
Tambah Teks
Fitur ini digunakan untuk menambahkan teks ke dalam sebuah gambar
Inputan yang diperlukan adalah posisi penulisan teks pada gambar, huruf yang dipakai, dan warna teks tersebut. Sebagai catatan untuk inputan Style huruf, dapat dipilih apakah ingin huruf tersebut dicetak tebal, miring, bergaris bawah, atau hurufnya dicoret. Pada inputan warna dapat dipilih 2 warna sehingga dimungkinkan untuk terjadi gradien warna pada teks inputan.
Gunakan fungsi ini untuk melakukan fitur tersebut
Public Sub TambahTeks(text As String, koordinatX As Integer, koordinatY As Integer, _ namaHuruf As String, ukuranHuruf As Single, namaStyleHuruf As String, _ namaWarna1 As String, namaWarna2 As String) Dim temp As Bitmap = DirectCast(_bitmapTerpakai, Bitmap) Dim bmap As Bitmap = DirectCast(temp.Clone(), Bitmap) Dim gr As Graphics = Graphics.FromImage(bmap) If String.IsNullOrEmpty(namaHuruf) Then namaHuruf = "Times New Roman" End If If ukuranHuruf.Equals(Nothing) Then ukuranHuruf = 10.0F End If Dim huruf As New Font(namaHuruf, ukuranHuruf) If Not String.IsNullOrEmpty(namaStyleHuruf) Then Dim styleHuruf As FontStyle = FontStyle.Regular Select Case namaStyleHuruf.ToLower() Case "tebal" styleHuruf = FontStyle.Bold Exit Select Case "miring" styleHuruf = FontStyle.Italic Exit Select Case "garis bawah" styleHuruf = FontStyle.Underline Exit Select Case "coret" styleHuruf = FontStyle.Strikeout Exit Select End Select huruf = New Font(namaHuruf, ukuranHuruf, styleHuruf) End If If String.IsNullOrEmpty(namaWarna1) Then namaWarna1 = "Black" End If If String.IsNullOrEmpty(namaWarna2) Then namaWarna2 = namaWarna1 End If Dim warna1 As Color = Color.FromName(namaWarna1) Dim warna2 As Color = Color.FromName(namaWarna2) Dim gW As Integer = CInt(text.Length * ukuranHuruf) gW = If(gW = 0, 10, gW) Dim LGBrush As New System.Drawing.Drawing2D.LinearGradientBrush(New Rectangle(0, 0, gW, CInt(ukuranHuruf)), warna1, warna2, System.Drawing.Drawing2D.LinearGradientMode.Vertical) gr.DrawString(text, huruf, LGBrush, koordinatX, koordinatY) _bitmapTerpakai = DirectCast(bmap.Clone(), Bitmap) End Sub
Hasil perbandingan sebelum dan sesudah dilakukan fitur penambahan teks adalah sebagai berikut (klik untuk perbesar gambar):
Tambah Obyek
Fitur ini digunakan untuk menambahkan obyek ke dalam sebuah gambar.
Inputan yang diperlukan adalah posisi penambahan obyek tersebut, ukuran obyek, tipe obyek, dan warna. Tipe obyek yang digambar dapat dipilih antara bulat atau segi empat. Dari 2 bentuk tersebut juga dapat dipilih apakah hanya garis saja atau terdapat isian warna dalam bentuk tersebut.
Gunakan fungsi ini untuk melakukan fitur tersebut
Public Sub TambahObyek(tipeObyek As String, koordinatX As Integer, koordinatY As Integer, lebar As Integer, panjang As Integer, namaWarna As String) Dim temp As Bitmap = DirectCast(_bitmapTerpakai, Bitmap) Dim bmap As Bitmap = DirectCast(temp.Clone(), Bitmap) Dim gr As Graphics = Graphics.FromImage(bmap) If String.IsNullOrEmpty(namaWarna) Then namaWarna = "Black" End If Dim pen As New Pen(Color.FromName(namaWarna)) Select Case tipeObyek.ToLower() Case "bulat berwarna" gr.FillEllipse(pen.Brush, koordinatX, koordinatY, lebar, panjang) Exit Select Case "segi empat berwarna" gr.FillRectangle(pen.Brush, koordinatX, koordinatY, lebar, panjang) Exit Select Case "bulat" gr.DrawEllipse(pen, koordinatX, koordinatY, lebar, panjang) Exit Select Case "segi empat" gr.DrawRectangle(pen, koordinatX, koordinatY, lebar, panjang) Exit Select Case Else gr.DrawRectangle(pen, koordinatX, koordinatY, lebar, panjang) Exit Select End Select _bitmapTerpakai = DirectCast(bmap.Clone(), Bitmap) End Sub
Hasil perbandingan sebelum dan sesudah dilakukan fitur penambahan obyek adalah sebagai berikut (klik untuk perbesar gambar):
Tambah Gambar
Fitur ini digunakan untuk menambahkan gambar ke dalam sebuah gambar.
Inputan yang diperlukan adalah posisi penambahan gambar tersebut, dan gambar yang akan ditambahkan.
Gunakan fungsi ini untuk melakukan fitur tersebut
Public Sub TambahGambar(alamatGambar As String, koordinatX As Integer, koordinatY As Integer) Dim temp As Bitmap = DirectCast(_bitmapTerpakai, Bitmap) Dim bmap As Bitmap = DirectCast(temp.Clone(), Bitmap) Dim gr As Graphics = Graphics.FromImage(bmap) If Not String.IsNullOrEmpty(alamatGambar) Then Dim bitmapGambar As Bitmap = DirectCast(Bitmap.FromFile(alamatGambar), Bitmap) Dim segiEmpat As New Rectangle(koordinatX, koordinatY, bitmapGambar.Width, bitmapGambar.Height) gr.DrawImage(Bitmap.FromFile(alamatGambar), segiEmpat) End If _bitmapTerpakai = DirectCast(bmap.Clone(), Bitmap) End Sub
Hasil perbandingan sebelum dan sesudah dilakukan fitur penambahan gambar adalah sebagai berikut (klik untuk perbesar gambar):
Potong
Fitur ini digunakan untuk memotong gambar yang tersedia.
Inputan yang diperlukan adalah posisi awal pemotongan beserta lebar dan panjang area yang akan dipotong. Sebelum melakukan pemotongan, akan diberikan penanda pada gambar untuk mengetahui area mana yang akan dipotong. Fungsi untuk menandakan calon area yang dipotong adalah sebagai berikut.
Public Sub TandaiAreaTerpotong(koordinatX As Integer, koordinatY As Integer, lebar As Integer, tinggi As Integer) _bitmapAreaPotongSebelumnya = DirectCast(_bitmapTerpakai, Bitmap) Dim bmap As Bitmap = DirectCast(_bitmapAreaPotongSebelumnya.Clone(), Bitmap) Dim gr As Graphics = Graphics.FromImage(bmap) Dim kuas As Brush = New Pen(Color.FromArgb(150, Color.White)).Brush Dim segiEmpat1 As New Rectangle(0, 0, _bitmapTerpakai.Width, koordinatY) Dim segiEmpat2 As New Rectangle(0, koordinatY, koordinatX, tinggi) Dim segiEmpat3 As New Rectangle(0, (koordinatY + tinggi), _bitmapTerpakai.Width, _bitmapTerpakai.Height) Dim segiEmpat4 As New Rectangle((koordinatX + lebar), koordinatY, (_bitmapTerpakai.Width - koordinatX - lebar), tinggi) gr.FillRectangle(kuas, segiEmpat1) gr.FillRectangle(kuas, segiEmpat2) gr.FillRectangle(kuas, segiEmpat3) gr.FillRectangle(kuas, segiEmpat4) _bitmapTerpakai = DirectCast(bmap.Clone(), Bitmap) End Sub
Jika fungsi tersebut dijalankan, maka bentuk konfirmasi pemotongan gambar adalah sebagai berikut:
Apabila area tersebut sesuai dengan yang diinginkan, maka lakukan proses pemotongan gambar. Gunakan fungsi untuk melakukan fitur tersebut
Public Sub Potong(koordinatX As Integer, koordinatY As Integer, lebar As Integer, tinggi As Integer) Dim temp As Bitmap = DirectCast(_bitmapTerpakai, Bitmap) Dim bmap As Bitmap = DirectCast(temp.Clone(), Bitmap) If koordinatX + lebar > _bitmapTerpakai.Width Then lebar = _bitmapTerpakai.Width - koordinatX End If If koordinatY + tinggi > _bitmapTerpakai.Height Then tinggi = _bitmapTerpakai.Height - koordinatY End If Dim segiEmpat As New Rectangle(koordinatX, koordinatY, lebar, tinggi) _bitmapTerpakai = DirectCast(bmap.Clone(segiEmpat, bmap.PixelFormat), Bitmap) End Sub
Hasil perbandingan sebelum dan sesudah dilakukan fitur pemotongan gambar adalah sebagai berikut (klik untuk perbesar gambar):
Ubah Ukuran
Fitur ini digunakan untuk mengubah ukuran gambar itu sendiri, sehingga ukuran gambar dapat diperluas atau dipersempit sesuai kebutuhan.
Inputan yang diperlukan adalah lebar dan panjang yang baru dari gambar yang tersedia.
Gunakan fungsi ini untuk melakukan fitur tersebut
Public Sub UbahUkuran(lebarBaru As Integer, panjangBaru As Integer) If lebarBaru <> 0 AndAlso panjangBaru <> 0 Then Dim temp As Bitmap = DirectCast(_bitmapTerpakai, Bitmap) Dim bmap As New Bitmap(lebarBaru, panjangBaru, temp.PixelFormat) Dim nFaktorLebar As Double = CDbl(temp.Width) / CDbl(lebarBaru) Dim nFaktorPanjang As Double = CDbl(temp.Height) / CDbl(panjangBaru) Dim fx As Double, fy As Double, nx As Double, ny As Double Dim cx As Integer, cy As Integer, fr_x As Integer, fr_y As Integer Dim warna1 As New Color() Dim warna2 As New Color() Dim warna3 As New Color() Dim warna4 As New Color() Dim nMerah As Byte, nHijau As Byte, nBiru As Byte Dim bp1 As Byte, bp2 As Byte For x As Integer = 0 To bmap.Width - 1 For y As Integer = 0 To bmap.Height - 1 fr_x = CInt(Math.Floor(x * nFaktorLebar)) fr_y = CInt(Math.Floor(y * nFaktorPanjang)) cx = fr_x + 1 If cx >= temp.Width Then cx = fr_x End If cy = fr_y + 1 If cy >= temp.Height Then cy = fr_y End If fx = x * nFaktorLebar - fr_x fy = y * nFaktorPanjang - fr_y nx = 1.0 - fx ny = 1.0 - fy warna1 = temp.GetPixel(fr_x, fr_y) warna2 = temp.GetPixel(cx, fr_y) warna3 = temp.GetPixel(fr_x, cy) warna4 = temp.GetPixel(cx, cy) ' Merah bp1 = CByte(nx * warna1.R + fx * warna2.R) bp2 = CByte(nx * warna3.R + fx * warna4.R) nMerah = CByte(ny * CDbl(bp1) + fy * CDbl(bp2)) ' Hijau bp1 = CByte(nx * warna1.G + fx * warna2.G) bp2 = CByte(nx * warna3.G + fx * warna4.G) nHijau = CByte(ny * CDbl(bp1) + fy * CDbl(bp2)) ' Biru bp1 = CByte(nx * warna1.B + fx * warna2.B) bp2 = CByte(nx * warna3.B + fx * warna4.B) nBiru = CByte(ny * CDbl(bp1) + fy * CDbl(bp2)) bmap.SetPixel(x, y, System.Drawing.Color.FromArgb(255, nMerah, nHijau, nBiru)) Next Next _bitmapTerpakai = DirectCast(bmap.Clone(), Bitmap) End If End Sub
Hasil perbandingan sebelum dan sesudah dilakukan fitur perubahan ukuran adalah sebagai berikut (klik untuk perbesar gambar):
Putar
Fitur ini digunakan untuk memutar gambar yang tersedia.
Ada beberapa jenis perputaran yang dapat dipilih, yaitu putar 90 derajat, putar 180 derajat, putar 270 derajat, balik gambar secara horizontal, dan balik gambar secara vertikal
Gunakan fungsi ini untuk melakukan fitur tersebut.
Public Sub Putar(tipePutar As RotateFlipType) Dim temp As Bitmap = DirectCast(_bitmapTerpakai, Bitmap) Dim bmap As Bitmap = DirectCast(temp.Clone(), Bitmap) bmap.RotateFlip(tipePutar) _bitmapTerpakai = DirectCast(bmap.Clone(), Bitmap) End Sub
Hasil perbandingan sebelum dan sesudah dilakukan fitur pemutaran gambar adalah sebagai berikut (klik untuk perbesar gambar):
hasil pertama adalah gambar setelah diputar 90 derajat
hasil kedua adalah gambar setelah dibalik secara vertikal
Kecerahan
Fitur ini digunakan untuk mengatur kecerahan dalam sebuah gambar. Pencerahan gambar diperlukan dalam pengolahan citra untuk mendapatkan gambar dengan warna yang lebih tipis dibandingkan aslinya.
Inputan yang diperlukan adalah nilai kecerahan itu sendiri. Nilai yang digunakan harus diantara -255 sampai dengan 255
Gunakan fungsi ini untuk melakukan fitur tersebut
Public Sub setKecerahan(kecerahan As Integer) Dim temp As Bitmap = DirectCast(_bitmapTerpakai, Bitmap) Dim bmap As Bitmap = DirectCast(temp.Clone(), Bitmap) If kecerahan < -255 Then kecerahan = -255 End If If kecerahan > 255 Then kecerahan = 255 End If Dim c As Color For i As Integer = 0 To bmap.Width - 1 For j As Integer = 0 To bmap.Height - 1 c = bmap.GetPixel(i, j) Dim cR As Integer = c.R + kecerahan Dim cG As Integer = c.G + kecerahan Dim cB As Integer = c.B + kecerahan If cR < 0 Then cR = 1 End If If cR > 255 Then cR = 255 End If If cG < 0 Then cG = 1 End If If cG > 255 Then cG = 255 End If If cB < 0 Then cB = 1 End If If cB > 255 Then cB = 255 End If bmap.SetPixel(i, j, Color.FromArgb(CByte(cR), CByte(cG), CByte(cB))) Next Next _bitmapTerpakai = DirectCast(bmap.Clone(), Bitmap) End Sub
Hasil perbandingan sebelum dan sesudah dilakukan fitur kecerahan adalah sebagai berikut (klik untuk perbesar gambar):
Hasil pertama adalah gambar setelah dilakukan proses kecerahan dengan nilai kecerahan -50
Hasil kedua adalah gambar setelah dilakukan proses kecerahan dengan nilai kecerahan +100
Ketajaman
Fitur ini digunakan untuk mengatur ketajaman dalam sebuah gambar. Semua warna yang dianggap gelap akan semakin digelapkan, dan warna yang dianggap terang akan semakin diterangkan, sehingga akan terlihat jelas perbedaan antara kedua kelompok warna tersebut.
Inputan yang diperlukan adalah nilai ketajaman itu sendiri. Nilai minimal adalah – 100, sedangkan nilai maksimalnya adalah bebas.
Gunakan fungsi ini untuk melakukan fitur tersebut
Public Sub setKetajaman(ketajaman As Double) Dim temp As Bitmap = DirectCast(_bitmapTerpakai, Bitmap) Dim bmap As Bitmap = DirectCast(temp.Clone(), Bitmap) If ketajaman < -100 Then ketajaman = -100 End If If ketajaman > 100 Then ketajaman = 100 End If ketajaman = (100.0 + ketajaman) / 100.0 ketajaman *= ketajaman Dim c As Color For i As Integer = 0 To bmap.Width - 1 For j As Integer = 0 To bmap.Height - 1 c = bmap.GetPixel(i, j) Dim pR As Double = c.R / 255.0 pR -= 0.5 pR *= ketajaman pR += 0.5 pR *= 255 If pR < 0 Then pR = 0 End If If pR > 255 Then pR = 255 End If Dim pG As Double = c.G / 255.0 pG -= 0.5 pG *= ketajaman pG += 0.5 pG *= 255 If pG < 0 Then pG = 0 End If If pG > 255 Then pG = 255 End If Dim pB As Double = c.B / 255.0 pB -= 0.5 pB *= ketajaman pB += 0.5 pB *= 255 If pB < 0 Then pB = 0 End If If pB > 255 Then pB = 255 End If bmap.SetPixel(i, j, Color.FromArgb(CByte(pR), CByte(pG), CByte(pB))) Next Next _bitmapTerpakai = DirectCast(bmap.Clone(), Bitmap) End Sub
Hasil perbandingan sebelum dan sesudah dilakukan fitur ketajaman adalah sebagai berikut (klik untuk perbesar gambar):
Hasil pertama adalah gambar setelah dilakukan proses ketajaman dengan nilai ketajaman -50
Hasil kedua adalah gambar setelah dilakukan proses ketajaman dengan nilai ketajaman +100
Gamma
Fitur ini digunakan untuk mengatur gamma dalam sebuah gambar. Gamma mengatur kecerahan dari sebuah gambar, tidak berdasarkan nilai kecerahan yang dibahas sebelumnya, tetapi menggunakan komponen warna RGB (merah, hijau, biru). Karena menggunakan 3 komponen warna, maka dalam pengaturan kecerahan tersebut dapat diatur pula warna komponen yang lebih dominan, sehingga gambar tersebut akan sedikit terlihat lebih merah / hijau / biru / kombinasi warna yang lebih dominan.
Inputan yang diperlukan adalah 3 komponen warna gamma, yaitu merah, hijau, dan biru. Nilai yang direkomendasikan dalam masing-masing komponen warna adalah antara 0.2 sampai dengan 5
Gunakan fungsi ini untuk melakukan fitur tersebut
Public Sub SetGamma(komponenMerah As Double, komponenHijau As Double, komponenBiru As Double) Dim temp As Bitmap = DirectCast(_bitmapTerpakai, Bitmap) Dim bmap As Bitmap = DirectCast(temp.Clone(), Bitmap) Dim c As Color Dim gammaMerah As Byte() = BuatArrayGamma(komponenMerah) Dim gammaHijau As Byte() = BuatArrayGamma(komponenHijau) Dim gammaBiru As Byte() = BuatArrayGamma(komponenBiru) For i As Integer = 0 To bmap.Width - 1 For j As Integer = 0 To bmap.Height - 1 c = bmap.GetPixel(i, j) bmap.SetPixel(i, j, Color.FromArgb(gammaMerah(c.R), gammaHijau(c.G), gammaBiru(c.B))) Next Next _bitmapTerpakai = DirectCast(bmap.Clone(), Bitmap) End Sub Private Function BuatArrayGamma(color As Double) As Byte() Dim gamma As Byte() = New Byte(255) {} For i As Integer = 0 To 255 gamma(i) = CByte(Math.Min(255, CInt((255.0 * Math.Pow(i / 255.0, 1.0 / color)) + 0.5))) Next Return gamma End Function
Hasil perbandingan sebelum dan sesudah dilakukan fitur pengatuan gamma adalah sebagai berikut (klik untuk perbesar gambar):
Hasil pertama adalah gambar setelah dilakukan proses pengaturan gamma dengan nilai komponen merah = 1, hijau = 2, biru = 3
Hasil kedua adalah gambar setelah dilakukan proses pengaturan gamma dengan nilai komponen merah = 3, hijau = 2, biru = 1
Keseimbangan Warna
Fitur ini digunakan untuk mengatur keseimbangan warna dalam sebuah gambar. Sebuah warna diukur dari 3 komponen warna RGB (merah, hijau, biru), oleh karena itu sebuah gambar dapat difilter menjadi 1 warna saja, antara merah / hijau / biru saja.
Inputan yang diperlukan adalah filter warna yang diinginkan, apakah warna merah / hijau / biru.
Gunakan fungsi ini untuk melakukan fitur tersebut
Public Sub setFilterWarna(tipeFilterWarna As ColorFilterTypes) Dim temp As Bitmap = DirectCast(_bitmapTerpakai, Bitmap) Dim bmap As Bitmap = DirectCast(temp.Clone(), Bitmap) Dim c As Color For i As Integer = 0 To bmap.Width - 1 For j As Integer = 0 To bmap.Height - 1 c = bmap.GetPixel(i, j) Dim nPixelR As Integer = 0 Dim nPixelG As Integer = 0 Dim nPixelB As Integer = 0 If tipeFilterWarna = ColorFilterTypes.Merah Then nPixelR = c.R nPixelG = c.G - 255 nPixelB = c.B - 255 ElseIf tipeFilterWarna = ColorFilterTypes.Hijau Then nPixelR = c.R - 255 nPixelG = c.G nPixelB = c.B - 255 ElseIf tipeFilterWarna = ColorFilterTypes.Biru Then nPixelR = c.R - 255 nPixelG = c.G - 255 nPixelB = c.B End If nPixelR = Math.Max(nPixelR, 0) nPixelR = Math.Min(255, nPixelR) nPixelG = Math.Max(nPixelG, 0) nPixelG = Math.Min(255, nPixelG) nPixelB = Math.Max(nPixelB, 0) nPixelB = Math.Min(255, nPixelB) bmap.SetPixel(i, j, Color.FromArgb(CByte(nPixelR), CByte(nPixelG), CByte(nPixelB))) Next Next _bitmapTerpakai = DirectCast(bmap.Clone(), Bitmap) End Sub
Hasil perbandingan sebelum dan sesudah dilakukan fitur keseimbangan warna adalah sebagai berikut (klik untuk perbesar gambar):
Hasil pertama adalah gambar setelah dilakukan proses filter warna merah
Hasil kedua adalah gambar setelah dilakukan proses filter warna hijau
Hasil ketiga adalah gambar setelah dilakukan proses filter warna biru
Warna Tunggal
Fitur ini digunakan untuk mengubah warna sebuah gambar menjadi 2 warna saja, yaitu warna perpaduan antara hitam dan putih. Semua komponen warna RGB (merah, hijau, biru) akan dikonversi menjadi warna abu-abu dengan tingkat kepadatan warna yang sama, sehingga warna dengan lebih gelap akan dikonversi menjadi abu-abu yang lebih gelap, dan warna yang terang akan dikonversi menjadi abu-abu yang lebih terang.
Berbeda dari fitur-fitur yang dijelaskan sebelumnya, fitur ini tidak memerlukan inputan apapun
Gunakan fungsi ini untuk melakukan fitur tersebut
Public Sub SetWarnaTunggal() Dim temp As Bitmap = DirectCast(_bitmapTerpakai, Bitmap) Dim bmap As Bitmap = DirectCast(temp.Clone(), Bitmap) Dim c As Color For i As Integer = 0 To bmap.Width - 1 For j As Integer = 0 To bmap.Height - 1 c = bmap.GetPixel(i, j) Dim abu2 As Byte = CByte(0.299 * c.R + 0.587 * c.G + 0.114 * c.B) bmap.SetPixel(i, j, Color.FromArgb(abu2, abu2, abu2)) Next Next _bitmapTerpakai = DirectCast(bmap.Clone(), Bitmap) End Sub
Hasil perbandingan sebelum dan sesudah dilakukan fitur warna tunggal adalah sebagai berikut (klik untuk perbesar gambar):
Warna Komplementer
Fitur ini digunakan untuk mengubah warna sebuah gambar menjadi warna komplementer, atau disebut juga warna kebalikan. Warna Komplementer adalah warna yang berseberangan dalam segitiga warna pokok, yaitu biru, kuning, merah. Sebagai contoh:
- Warna komplementer dari biru adalah perpaduan dari warna kuning dan merah, yaitu warna jingga
- Warna komplementer dari kuning adalah perpaduan dari warna merah dan biru, yaitu warna ungu
- Warna komplementer dari merah adalah perpaduan dari warna biru dan kuning, yaitu warna hijau
- dan tentu saja, warna komplementer dari hitam adalah putih
Sama seperti fitur Warna Tunggal, fitur ini tidak memerlukan inputan apapun
Gunakan fungsi ini untuk melakukan fitur tersebut
Public Sub SetWarnaKomplementer() Dim temp As Bitmap = DirectCast(_bitmapTerpakai, Bitmap) Dim bmap As Bitmap = DirectCast(temp.Clone(), Bitmap) Dim c As Color For i As Integer = 0 To bmap.Width - 1 For j As Integer = 0 To bmap.Height - 1 c = bmap.GetPixel(i, j) bmap.SetPixel(i, j, Color.FromArgb(255 - c.R, 255 - c.G, 255 - c.B)) Next Next _bitmapTerpakai = DirectCast(bmap.Clone(), Bitmap) End Sub
Hasil perbandingan sebelum dan sesudah dilakukan fitur warna komplementer adalah sebagai berikut (klik untuk perbesar gambar):
Kaca Pembesar
Fitur ini tidak ada hubungannya dengan pengolahan citra, hanya sebagai alat bantu saja.
Sebagai contoh dalam kasus ini, pembesaran berguna di dalam fitur Mode Menggambar yang sudah dijelaskan sebelumnya. Jika pada saat menggambar diperlukan pena dengan ukuran kurang dari 1 poin, maka penggambaran dapat dilakukan dengan cara menambah pembesaran gambar. Setelah menggambar pada pembesaran tersebut, kembalikan pembesaran ke posisi semula. Maka hasil gambar dengan pena dengan ukuran kurang dari 1 poin akan dapat dicapai.
Gunakan fungsi ini untuk melakukan fitur pembesaran tersebut
Private Sub comKacaPembesar_SelectedIndexChanged(sender As Object, e As EventArgs) Handles comKacaPembesar.SelectedIndexChanged faktorPembesar = comKacaPembesar.Text.Substring(0, comKacaPembesar.Text.Length - 1) / 100 PictureBox1.Width = lebarGambarSemula * faktorPembesar PictureBox1.Height = panjangGambarSemula * faktorPembesar End Sub
Contoh source code lengkap dalam bahasa VB (Visual Basic) dapat didownload disini:
Jika membutuhkan jasa kami dalam pembuatan program, keterangan selanjutnya dapat dilihat di Fasilitas dan Harga
Jika ada yang kurang paham dengan langkah-langkah algoritma diatas, silahkan berikan komentar Anda.
Selamat mencoba.