unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type 
  TForm1 =class (TForm)
    Button1: TButton;
    procedure Button1Click (Sender: TObject);
  end ;

var
  Form1: TForm1;

implementation

{$ R * .dfm}
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 = maxRGBthen h: = (rgb.Green-rgb.Blue) / Delta
     else
       if rgb.Green = maxRGBthen h: =2.0 + (rgb.Blue-rgb.Red) / Delta
       else
         if rgb.Blue = maxRGBthen 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 resultdo
   begin
     Hue: = h;
     Saturnation: = s * 100 / 255;
     Brightness: = b * 100 / 255;
   end ;
end ;

//test:
procedure TForm1.Button1Click (Sender: TObject);
var
  rgb: TRGBColor;
  hsb: THSBColor;
begin 
  rgb.Red: =255;
  rgb.Green: = 0;
  rgb.Blue: = 0;

  hsb: = RGBToHSB (rgb);

  ShowMessage (FloatToStr (hsb.Hue));          // 0
  ShowMessage (FloatToStr (hsb.Saturnation)); // 100
  ShowMessage (FloatToStr (hsb.Brightness));   // 100
end ;

end .