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

Wil*_*iam -2 delphi vcl

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

Dav*_*nan 6

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

var
  Color: Integer;
....
Color := StrToInt(str);
Run Code Online (Sandbox Code Playgroud)

您的值有四个通道,因此假设第四个通道是alpha.挑选出用颜色通道GetRValue,GetGValueGetBValue.像这样获取alpha通道:

function GetAValue(rgba: Integer): Byte;
begin
  Result := Byte(rgb shr 24);
end;
Run Code Online (Sandbox Code Playgroud)

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

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;
Run Code Online (Sandbox Code Playgroud)

然后你可以写:

var
  r, g, b, a: Byte;
....
ExtractColorChannels(StrToInt(str), r, g, b, a);
Run Code Online (Sandbox Code Playgroud)

输入'$16750899'此信息会产生以下渠道:

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