zoukankan      html  css  js  c++  java
  • 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.
    
  • 相关阅读:
    树状数组
    1424:【例题3】喷水装置
    Matrix (二分套二分
    素数筛
    快速幂
    CentOS6/7-防火墙管理
    Ubuntu15.04 python升级到python-3.6.x
    查看Linux系统用户登录日志
    [shell]查找网段内可用IP地址
    最小化安装Linux的常用配置整理
  • 原文地址:https://www.cnblogs.com/del/p/991572.html
Copyright © 2011-2022 走看看