我在尝试将4字节十六进制格式颜色转换为RGB格式时遇到问题,最大的问题是4字节十六进制颜色的两个第一个字符,我不知道如何转换它。所以我有这个十六进制:$16750899
并希望转换为RGB格式(0..255,0..255,0..255)
答案 0 :(得分:6)
将十六进制字符串转换为如下数值:
var
Color: Integer;
....
Color := StrToInt(str);
您的值有四个通道,因此假设第四个通道是alpha。使用GetRValue
,GetGValue
和GetBValue
挑选颜色通道。像这样获取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。
我希望此链接可以帮助您。