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.
    
  • 相关阅读:
    移动端调试Vconsole
    Vue-返回顶部
    Vue-封装loading
    Vue-水印封装
    Vue-封装scroll触底
    微信小程序-图片上传
    前端面试题(2)
    前端常见面试题
    服务端渲染(SSR)和客户端(CSR)渲染的区别
    什么是模块化?模块化开发的好处
  • 原文地址:https://www.cnblogs.com/del/p/991572.html
Copyright © 2011-2022 走看看