RGB adalah metode pewarnaan standar untuk grafik komputer pada saat ini, warna R(red), G(Green), B(Blue) yang masing-masing diwakili oleh 8 bit warna. Pada pengaplikasiannya warna rgb sangat cocok untuk merepresentasikan cara mewarnai monitor (piksel-piksel), akan tetapi warna rgb kurang cocok untuk metode pewarnaan (penglihatan) mata manusia. Maksudnya adalah misalkan warna merah apabila dikurangi akan menghasilkan warna pink (menurut penglihatan manusia).
Akan tetapi apabila menggunakan warna rgb apabila nilai warna merah dikurangi makan tidak akan menghasilkan warna pink atau merah jambu. Karena alasan inilah dibuat pewarnaan menggunakan ruang hsv seperti yang terlihat di bawah ini :
Pada gambar di atas terdapat 3 komponen gambar utama yaitu : Hue, Saturation dan Value.
Hue : Yaitu diwakili oleh 360 derajat warna, yang nilai warnanya dapat dilihat pada gambar (b).
Saturation : yaitu panah horizontal yang berwarna hitam, mempunyai antar 0 hingga 100 atau 0 sampai 1. Nilai 0 untuk warna putih, semakin besar maka merujuk kepada warna asli dari hue.
Value : yaitu panah vertikal yang berwarna putih, nilai sama dengan saturation. Nilai 0 mengacu pada hitam sedangkan semakin besar memberikan warna asli dari hue.
Konversi RGB >> HSV
Program :
Public Structure RGB
Dim R As Double
Dim G As Double
Dim B As Double
End Structure
Public Structure HSV
Dim H As Double
Dim S As Double
Dim V As Double
End Structure
Public Function rgb2hsv(ByVal cin As RGB) As HSV
Dim _R, _G, _B As Double 'sebagai r,g,b aksen
Dim cMax, cMin, delta As Double 'sebagai warna max, warna min, dan delta
_R = cin.R / 255
_G = cin.G / 255
_B = cin.B / 255
cMax = Math.Max(_R, _G)
cMax = Math.Max(cMax, _B)
cMin = Math.Min(_R, _G)
cMin = Math.Min(cMin, _B)
delta = cMax - cMin
If cMax = _R Then
rgb2hsv.H = Math.Round(Math.Abs(60 * modulusku(((_G - _B) / delta), 6)), 0)
ElseIf cMax = _G Then
rgb2hsv.H = Math.Round(Math.Abs(60 * (((_B - _R) / delta) + 2)), 0)
ElseIf cMax = _B Then
rgb2hsv.H = Math.Round(Math.Abs(60 * (((_R - _G) / delta) + 4)), 0)
End If
If Double.IsNaN(rgb2hsv.H) = True Then
rgb2hsv.H = 0
End If
If cMax = 0 Then
rgb2hsv.S = 0
Else
rgb2hsv.S = Math.Round(delta / cMax, 3) * 100
End If
rgb2hsv.V = Math.Round(cMax, 3) * 100
End Function
Post a Comment