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 = maxRGB then h := (rgb.Green - rgb.Blue) / Delta else if rgb.Green = maxRGB 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; //测试: 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.