RGBToHSB in Delphi
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 .