How to Convert RGB Color to HSB (HSV) Color

From YYpBD's MediaWiki

Jump to: navigation, search

How to Convert RGB Color to HSB (HSV) Color
Graphics Tip

From Zarko Gajic,
Your Guide to Delphi Programming.
FREE Newsletter. Sign Up Now!
The HSV (Hue, Saturation, Value) model, also called HSB (Hue, Saturation, Brightness), defines a color space commonly used in graphics applications. Hue value ranges from 0 to 360, Saturation and Brightness values range from 0 to 100%.

The RGB (Red, Green, Blue) is also used, primarily in web design. When written, RGB values are commonly specified using three integers between 0 and 255, each representing red, green, and blue intensities.

Here's a function to convert a RGB color to a HSV color.

uses Math;

type
   TRGBColor = record
     Red,
     Green,
     Blue : Byte;
   end;

   THSBColor = record
     Hue,
     Saturnation,
     Brightness : Double;
   end;

function RGBToHSB(rgb : TRGBColor) : THSBColor;
var
   minRGB, maxRGB, delta : Double;
   h , s , b : Double ;
begin
   H := 0.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.0) then s := 255.0 * Delta / maxRGB
   else s := 0.0;
   if (s <> 0.0) then
   begin
     if rgb.Red = maxRGB then h := (rgb.Green - rgb.Blue) / Delta
     else
       if rgb.Green = minRGB then h := 2.0 + (rgb.Blue - rgb.Red) / Delta
       else
         if rgb.Blue = maxRGB then h := 4.0 + (rgb.Red - rgb.Green) / Delta
   end
   else h := -1.0;
   h := h * 60 ;
   if h < 0.0 then h := h + 360.0;
   with result do
   begin
     Hue := h;
     Saturnation := s * 100 / 255;
     Brightness := b * 100 / 255;
   end;
end;


맞춤검색