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.
    
  • 相关阅读:
    JS 的execCommand 方法 做的一个简单富文本
    机器学习入门
    code practice websites
    机器学习 入门参考资料
    const型变量与函数重载
    数组是否应该初始化?
    翻译:编译器内部的秘密微软的编译器是如何解析Try/Catch/Throw的
    在C++中用C#风格设置类的属性值

    记可敬可佩的老车同志
  • 原文地址:https://www.cnblogs.com/del/p/991572.html
Copyright © 2011-2022 走看看