将4字节十六进制颜色转换为RGB

时间:2016-11-21 13:25:52

标签: delphi vcl

我在尝试将4字节十六进制格式颜色转换为RGB格式时遇到问题,最大的问题是4字节十六进制颜色的两个第一个字符,我不知道如何转换它。所以我有这个十六进制:$16750899并希望转换为RGB格式(0..255,0..255,0..255)

2 个答案:

答案 0 :(得分:6)

将十六进制字符串转换为如下数值:

var
  Color: Integer;
....
Color := StrToInt(str);

您的值有四个通道,因此假设第四个通道是alpha。使用GetRValueGetGValueGetBValue挑选颜色通道。像这样获取alpha通道:

function GetAValue(rgba: Integer): Byte;
begin
  Result := Byte(rgb shr 24);
end;

或者您可以像这样一次解压缩它们:

procedure ExtractColorChannels(rgba: Integer; out r, g, b, a: Byte);
begin
  r := Byte(rgba);
  g := Byte(rgba shr 8);
  b := Byte(rgba shr 16);
  a := Byte(rgba shr 24);
end;

然后你可以写:

var
  r, g, b, a: Byte;
....
ExtractColorChannels(StrToInt(str), r, g, b, a);

对于'$16750899'的输入,这会产生以下渠道:

Alpha: $16
Blue: $75
Green: $08
Red: $99

答案 1 :(得分:0)

嗯,你可以从embarcadero docwiki获得Colors in VCL

如文件所述:

  

[...]

     

如果将TColor指定为特定的4字节十六进制数

     

[...]

     低三个字节分别代表蓝色绿色红色的RGB颜色强度。< / p>

然后,您可以查看此code example

我希望此链接可以帮助您。