zoukankan      html  css  js  c++  java
  • delphi 颜色转换函数总结

    unit UColor;
    
    interface
    
    uses windows, sysutils, classes, graphics;
    
    function HexToInt(Hexa: String): LongWord;
    
    function ColorToString(color: TColor): String;
    
    
    function WebColorToDelphiTColor(webcolor: String): TColor;
    function HexToTColor(sHtmlColor: String): TColor;
    
    function HexIntColorToHtmlColor(c: Integer): String;
    function TColorToWebColor(DColor: TColor): String;
    function HexStrColorToHtmlColor(s: String): String;
    
    
    
    
    
    
    implementation
    
    function HexToInt(Hexa: String): LongWord;
    const
      ValoresHexa: array['A'..'F'] of Integer = (10, 11, 12, 13, 14, 15);
    var
      nDecimal: LongWord;
      nIndex: Byte;
    begin
      nDecimal := 0;
      Hexa := Uppercase(Hexa);
      for nIndex := Length(Hexa) downto 1 do
        if Hexa[nIndex] in ['0'..'9'] then
          nDecimal := nDecimal + StrToInt(Hexa[nIndex]) *
            Trunc(Exp((Length(Hexa) - nIndex) * ln(16)))
      else
        nDecimal := nDecimal + ValoresHexa[Hexa[nIndex]] *
          Trunc(Exp((Length(Hexa) - nIndex) * ln(16)));
      Result := nDecimal;
    end;
    
    function ColorToString(color: TColor): String;
    var
      r, g, b: Byte;
    begin
      r := GetRValue(color);
      g := GetgValue(color);
      b := GetbValue(color);
      Result := '$' + IntToHex(TColor(RGB(r, g, b)), 8);
    end;
    
    
    function WebColorToDelphiTColor(webcolor: String): TColor;
    var
      a: array [0..3] of Byte;
      b: array[0..3] of Byte;
    begin
    {
          rgb颜色,就是用6位16进制数去表示的颜色
          RGB的颜色是从低位向高位存储,而TCOLOR正好与之相反,
          例如
           RGB : F1F2FE
           Tcolor: $00FEF2F1
    }
      Integer(a) := HexToInt(webcolor);
      if a[3] = 0 then
      begin
        b[0] := a[2];
        b[1] := a[1];
        b[2] := a[0];
        b[3] := 0;
      end
      else
      begin
        b[0] := a[3];
        b[1] := a[2];
        b[2] := a[1];
        b[3] := a[0];
      end;
      Result := TColor(b);
    end;
    
    
    function HexToTColor(sHtmlColor: String): TColor;
    begin
      //与上面 WebColorToDelphiTColor 的功能相同
      if pos('#', sHtmlColor) = 1 then
        sHtmlColor := copy(sHtmlColor, 2, length(sHtmlColor));
    
      Result :=
        RGB(StrToInt(#36 + Copy(sHtmlColor, 1, 2)),
        StrToInt(#36 + Copy(sHtmlColor, 3, 2)), StrToInt(#36 + Copy(sHtmlColor, 5, 2)));
    end;
    
    
    function HexIntColorToHtmlColor(c: Integer): String;
    var
      R, G, B: Byte;
    begin
      R := c and $FF;
      G := (c shr 8) and $FF;
      B := (c shr 16) and $FF;
      Result := #35 + Format('%.2x%.2x%.2x', [R, G, B]);
    end;
    
    {从十六进制字符串转换到 Html 颜色}
    function HexStrColorToHtmlColor(s: String): String;
    var
      i: Integer;
      R, G, B: Byte;
    begin
      i := StrToInt(s);
      R := i and $FF;
      G := (i shr 8) and $FF;
      B := (i shr 16) and $FF;
      Result := #35 + Format('%.2x%.2x%.2x', [R, G, B]);
    end;
    
    function TColorToWebColor(DColor: TColor): String;
    var
      tmpRGB: TColorRef;
    begin
      tmpRGB := ColorToRGB(DColor);
      Result := Format('#%.2x%.2x%.2x', [GetRValue(tmpRGB),
        GetGValue(tmpRGB), GetBValue(tmpRGB)]);
    end;
    
    
    
    
    end.
  • 相关阅读:
    [CALayer release]: message sent to deallocated instance 的原因
    Java格式化打印及数字格式化
    Java断言关键字
    Java数值使用下划线
    Java数组复制
    .net你必须知道的事儿 1.5
    .net你必须知道的事儿 1.4
    .net你必须知道的事儿 1.3
    .net你必须知道的事儿 1.2
    .net你必须知道的事儿 1.1
  • 原文地址:https://www.cnblogs.com/yzryc/p/6322037.html
Copyright © 2011-2022 走看看