Algorithm to Switch Between RGB and HSB Color Values

First, declare some types:

Type RGBColor     Red As Byte     Green As Byte     Blue As ByteEnd TypeType HSBColor     Hue As Double     Saturation As Double     Brightness As DoubleEnd Type

Next, here’s a brief pseudocode explanation of the procedure used by the RGB-to-HSB algorithm:

Set a Delta variable equal to [Max(r,g,b) - Min(r,g,b)]* Then Brightness = Max(r,g,b) * 100 / 255* If the color is (00,00,00) (black), then Saturation = 0, and h = -1; otherwise:   Saturation = 255 * Delta / Max(r,g,b)   Case Max(r,g,b) is equal to the value of                + Red : Set h = (Green - Blue) / Delta                + Green : h = 2 + (Blue - Red) / Delta                + Blue : h = 4 + (Red - Green) / Delta     * Hue = h * 60 , if h small then 0 , we have Hue = h + 360

Now, here’s the VB code for the RGB-to-HSB conversion:

Function RGBToHSB(rgb As RGBColor) As HSBColorDim minRGB, maxRGB, Delta As DoubleDim h, s, b As Double     h = 0     minRGB = Min(Min(rgb.Red, rgb.Green), rgb.Blue)     maxRGB = Max(Max(rgb.Red, rgb.Green), rgb.Blue)     Delta = (maxRGB - minRGB)     b = maxRGB     If (maxRGB <> 0) Then          s = 255 * Delta / maxRGB     Else          s = 0     End If     If (s <> 0) Then          If rgb.Red = maxRGB Then               h = (CDbl(rgb.Green) - CDbl(rgb.Blue)) / Delta          Else               If rgb.Green = maxRGB Then                    h = 2 + (CDbl(rgb.Blue) - CDbl(rgb.Red)) / Delta               Else                    If rgb.Blue = maxRGB Then                         h = 4 + (CDbl(rgb.Red) - CDbl(rgb.Green)) / Delta                    End If               End If          End If     Else          h = -1     End If     h = h * 60     If h < 0 Then h = h + 360     RGBToHSB.Hue = h     RGBToHSB.Saturation = s * 100 / 255     RGBToHSB.Brightness = b * 100 / 255End Function

Of course, you also need to go the other direction, changing from HSB to RGB.Note that:

  1. When Max = Red, abs((Green - Blue) / Delta) is always smaller than 1, or -1 < (Green - Blue) / Delta.
  2. When Max = Green, abs((Blue - Red) / Delta) is always smaller than 1, or 1 < 2 + (Blue - Red) / Delta <3.
  3. When Max = Blue, abs((Red - Green) / Delta) is always smaller than 1, or 3 < 4 + (Red - Green) / Delta <5.

So, in pseudocode, the procedure is:

Set h = Hue / 60    * Then s = Saturation * 255 / 100    * And b = Brightness * 255 / 100    * Max(r,g,b) will equal b.    * If s = 0  then the color is black (00,00,00), otherwise:          - Set Delta = s * Max(r,g,b) / 255          - Compare the value of h with 3,1,-1 in turn to find out the Values of Red, Green and Blue.

In VB6, the HSB-to-RGB algorithm looks like this:

Function HSBToRGB(hsb As HSBColor) As RGBColorDim maxRGB, Delta As DoubleDim h, s, b As Double     h = hsb.Hue / 60     s = hsb.Saturation * 255 / 100     b = hsb.Brightness * 255 / 100     maxRGB = b     If s = 0 Then          HSBToRGB.Red = 0          HSBToRGB.Green = 0          HSBToRGB.Blue = 0     Else          Delta = s * maxRGB / 255          If h > 3 Then               HSBToRGB.Blue = CByte(Round(maxRGB))               If h > 4 Then                    HSBToRGB.Green = CByte(Round(maxRGB - Delta))                    HSBToRGB.Red = CByte(Round((h - 4) * Delta)) + HSBToRGB.Green               Else                    HSBToRGB.Red = CByte(Round(maxRGB - Delta))                    HSBToRGB.Green = CByte(HSBToRGB.Red - Round((h - 4) * Delta))               End If          Else               If h > 1 Then                    HSBToRGB.Green = CByte(Round(maxRGB))                    If h > 2 Then                         HSBToRGB.Red = CByte(Round(maxRGB - Delta))                         HSBToRGB.Blue = CByte(Round((h - 2) * Delta)) + HSBToRGB.Red                    Else                         HSBToRGB.Blue = CByte(Round(maxRGB - Delta))                         HSBToRGB.Red = CByte(HSBToRGB.Blue - Round((h - 2) * Delta))                    End If               Else                    If h > -1 Then                         HSBToRGB.Red = CByte(Round(maxRGB))                         If h > 0 Then                              HSBToRGB.Blue = CByte(Round(maxRGB - Delta))                              HSBToRGB.Green = CByte(Round(h * Delta)) + HSBToRGB.Blue                         Else                              HSBToRGB.Green = CByte(Round(maxRGB - Delta))                              HSBToRGB.Blue = CByte(HSBToRGB.Green - Round(h * Delta))                         End If                    End If               End If          End If     End IfEnd Function
Share the Post:
Share on facebook
Share on twitter
Share on linkedin

Overview

The Latest

iOS app development

The Future of iOS App Development: Trends to Watch

When it launched in 2008, the Apple App Store only had 500 apps available. By the first quarter of 2022, the store had about 2.18 million iOS-exclusive apps. Average monthly app releases for the platform reached 34,000 in the first half of 2022, indicating rapid growth in iOS app development.

microsoft careers

Top Careers at Microsoft

Microsoft has gained its position as one of the top companies in the world, and Microsoft careers are flourishing. This multinational company is efficiently developing popular software and computers with other consumer electronics. It is a dream come true for so many people to acquire a high paid, high-prestige job

your company's audio

4 Areas of Your Company Where Your Audio Really Matters

Your company probably relies on audio more than you realize. Whether you’re creating a spoken text message to a colleague or giving a speech, you want your audio to shine. Otherwise, you could cause avoidable friction points and potentially hurt your brand reputation. For example, let’s say you create a