本文整理自网络,侵删。
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.
相关阅读 >>
Delphi 读取流 image1 stream 加载到image2 timage 对象
Delphi 在firemonkey应用程序中设置application.title
Delphi tms web core js callproc
Delphi2010 图片格式转换bmp, png,jpeg, gif, tiff , wmphoto
Delphi 使用shgetfileinfo函数获取任何文件大图标
Delphi dbgrideh 的分组统计 datagrouping
更多相关阅读请进入《Delphi》频道 >>