我正在尝试在GDIPAPI单元中使用MakeColor
方法,但是从int
到byte
的转换没有返回正确的值。
例
var
argbStr: string;
A, R, G, B: Byte;
begin
argbStr := 'ffffcc88';
A := StrToInt('$' + Copy(AValue, 1, 2));
R := StrToInt('$' + Copy(AValue, 3, 2));
G := StrToInt('$' + Copy(AValue, 5, 2));
B := StrToInt('$' + Copy(AValue, 7, 2));
Result := MakeColor(A, R, G, B);
end;
我究竟做错了什么?
最佳答案
字符串中的颜色分量的顺序与它们在ARGB
值中的顺序相同。因此,在将它们与MakeColor
组合在一起之前,无需分离这些组件。您可以直接进行转换:
function StringToARGB(const argbStr: string): GDIPAPI.ARGB;
begin
Result := ARGB(StrToInt('$' + argbStr));
end;
类型转换对于抑制alpha分量大于127时出现的范围检查错误是必不可少的。
StrToInt
返回带符号的整数,但ARGB
是无符号的类型。关于delphi - 如何将ARGB值从字符串转换为颜色?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2691382/