delphi RGBToHSB


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


联系电话:
020-00000000
联系电话:
020-00000000
联系电话:
020-12345678