Pengolahan Citra


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):

    Wallpaper XP pc_menggambar dummy


  • 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):

    Wallpaper XP pc_tambahteks dummy


  • 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):

    Wallpaper XP pc_tambahobyek dummy


  • 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):

    Wallpaper XP pc_tambahgambar dummy


  • 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:

    pc_konfirmasipotong dummy dummy

    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):

    Wallpaper XP pc_potong dummy


  • 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):

    Wallpaper XP pc_ubahukuran dummy


  • 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

    Wallpaper XP pc_putar90 pc_putarvertikal


  • 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

    Wallpaper XP pc_kecerahan-50 pc_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

    Wallpaper XP pc_ketajaman-50 pc_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

    Wallpaper XP pc_gammargb123 pc_gammargb321


  • 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
    Wallpaper XP

    pc_filtermerah pc_filterhijau pc_filterbiru


  • 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):

    Wallpaper XP pc_warnatunggal dummy


  • 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):

    Wallpaper XP pc_warnakomplementer dummy


  • 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.

    Tinggalkan sebuah komentar

    Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *