Program VB.Net Konversi RGB Ke HSV

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 :

hsv space

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

rgb to 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